-
promise对象的状态不受外界影响,由异步操作的结果决定当前状态
- Pending进行中
- Fulfilled已成功
- Reject已失败
-
一旦状态改变就不会再变
- Pending —>Fulfilled
- Pending —> Reject
-
一旦创建promise就会立即执行
-
then
- 作用为Promise实例添加状态改变时的回调函数,第一个参数是Resolve的回调函数,第二个参数是Reject的回调函数
- then方法返回的是一个新的Promise实例
- 如果then返回的仍然是一个Promise对象,而后一个回调函数就会等待该Promise对象状态发生改变再调用
-
catch
- 是then(null,rejection)的别名,用于指定发生错误时的回调函数
- reject的作用等同于抛出错误
- 错误总是会一直往后传递,知道被捕获为止,即错误总是会被下一个catch语句捕获
- resolved后如果还存在错误,没定义catch方法则不会捕获到,但是如果resolved后存在宏任务回调函数中出现报错,错误会冒泡到外层,成了未捕获的错误,会显示在控制台。因为这个错误时再Promise函数体外抛出的。
-
Promise.all
- 用于将多个Promise实例包装成一个新的Promise对象,参数不一定具有Iterator接口,且返回的对象每个成员都是Promise实例
- 只有所有的实例的状态都变成fulfilled或者其中一个变为rejected,才会调用all后面的回调函数
-
Promise.resolve()
- 如果参数是Promise对象,则不做任何修改,原封不动地返回这个实例
- 如果参数是对象具有then方法, 则将这个对象转为Promise对象,然后执行then方法
- 如果参数是原始值,则转为Promise对象,状态为Resolved
- 不带有参数,直接返回一个Resolved状态的Promise对象
-
Promise.reject()
- 返回一个Promise对象,状态为Pejected
- Promise.reject()方法的参数会原封不动地作为reject的理由变成后续方法的参数。
-
添加有用的Promise方法
//捕获最后一个方法的错误。 Promise.prototype.done = function(onFulfilled,onRejected){ this,then(onFulfilled,onRejected).catch(function.reason){ // 抛出全局异常 setTimeout(()=>{ throw reason },0) } } //无论最后状态如何都会执行 Promise.prototype.finally = function(callback){ let p = this.constructor; return this.then( value => p.resolve(callback()).then(()=> value) reason => p.resolve(callback()).then(()=>{throw reason}) ) }
Promise总结
最新推荐文章于 2022-07-30 23:34:02 发布
本文详细讲解了Promise对象的生命周期、状态变化规则、then与catch方法的使用,以及Promise.all和相关工厂方法如resolve/reject的应用。理解Promise有助于异步编程的高效组织。
摘要由CSDN通过智能技术生成