1 promise.then
then方法:then方法返回的是一个新的promise实例。
注意:如果采用链式的then,可以指定一组按照次序调用的回调函数,如果前一个回调函数返回的是promise,后一个函数会等前一个状态发生改变才会调用。
2 promise.catch
catch方法:catch方法是在promise发生错误时的回调。
注意:如果promise状态已经变成resolved,在抛出错误时无效的。promise错误具有‘冒泡’性质,会一直往上传递,直到被捕获。
3 promise.all
all方法:all方法用于将多个实例包装成一个新的promise实例。
注意:只有当所有的实例都变成fulfilled时,包装的实例状态,才会变成fulfilled,此时他们的返回值会传递给新的回调函数,只要其中有一个被rejected,包装的实例状态就会变成rejected,此时第一个被rejected的实例返回值会传递给新的回调。
4 promise.race
race方法:race方法同样是将多个实例包装成一个新的实例。跟上面的all方法类似。
5 promise.allSettled
allSettled方法:allSettled方法接收一组promise实例作为参数,包装成一个新的实例。
注意:只有等所有的实例都返回结果,才会结束。返回的结果不论成功失败,状态总是fulfilled,不会是失败。
6 promise.any
any方法:接收一组promise实例作为参数,只要有一个变为fulfilled状态,包装的实例就会变成fulfilled状态,如果所有的参数都变成rejected状态,就会变成rejected状态。
7 promise.reject
reject方法:reject方法会返回一个新的实例,状态为rejected。回调函数立即执行。
8 promise.try
try方法:在实际开发中遇到无法区分函数是同步还是异步操作时,但是还想用promise来处理,可以使用try方法。
9 promise.resolve
resolve方法:将现有对象转为promise对象,它的参数分为四种情况:
-
参数是一个promise实例;如果参数是promise实例,则不作修改,原样返回。
-
参数是一个thenable对象,是指由then方法的对象;该方法会将这个对象转为promise对象,然后立即执行then方法。
-
如果不是具有then方法的对象或者根本不是对象;如果参数是一个原始值,或者是一个不具有then方法的对象,则promise。resolve方法返回一个新的promise对象,状态为resolved
-
不带有任何参数;如果不带有任何参数会直接返回一个resolved状态的promise对象。
10 promise.catch
catch方法:catch方法是在promise发生错误时的回调。
注意:如果promise状态已经变成resolved,在抛出错误时无效的。promise错误具有‘冒泡’性质,会一直往上传递,直到被捕获。
resolve //成功的回调函数 reject // 失败的回调函数 var promise = new Premise(function (resolve, reject) { //... some code if (/*异步探作成功*/) { resolve(value); } else { reject(error); } }) let promise = new Promise(function(resolve,reject) { console.log("AAA"); resolve() }); promise.then(() => console.log("BBB"), () => console.log("DDD")); // then也可以传两个方法,一个成功的方法一个失败发方法 // .then前面返回的一定是个异步 console.log("CCC") 运行输出 AAA // 证明异步创建后里面会执行 CCC // BBB // then回调函数要等到所有代码执行完后才会执行 while (e.length) { n = n.then(e.shift(), e.shift()); // e.shift(): 取出e数组里面的第一个元素(这个元素是一个方法)函数方法并且移除 这里两个刚好是 一个成功的回调方法和一个失败的回调方法, 下断点的时候 给第一个e.shift()下断点 } Pormise.then:前面三个调用栈 1.send 2.ajax 3.XHMLHttpRequest 使用前三个栈一般都是加密的地方 可以直接放弃 平坦了 当前值 o.prev // 当前值 o.next // 下一次值 o.sent // 上一次的返回值