Promise 讲解如何简单使用方法

发布时间 2023-10-31 15:24:21作者: 守护式等待

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 // 上一次的返回值