【问】promise是什么?
【答】promise是一种异步编程解决方案,主要解决了:当有先后依赖的多个异步任务时,层层嵌套的回调写法不灵活、容易滋生bug、且难以维护的问题。promise有如下特点:
- Promise对象代表一个异步操作,有三种状态pending(任务进行中)、resolved(任务已成功)、rejected(任务已失败)。且状态变化只有两种途径:pending变为resolved(任务成功了)、pending变为rejected(任务失败了)
- Promise使用上,标准结构如下:
- Promise使用上,最佳实践如下:即不要在每个then中都传失败回调,而是在catch中统一处理(因为在不传失败回调的情况下,reject也会触发catch,参考代码测试1):
【扩展1】promise常用总结如下
- Promise.all:
Promise.all(iterable) 方法接收一个Promise对象组成的数组作为参数,当这个数组所有的Promise对象状态都变成resolved或者rejected的时候,才会去调用then(全为resolved时,触发then的成功回调,否则触发失败回调)- Promise.race:
Promise.race(iterable) 方法接收一个Promise对象组成的数组作为参数,当这个数组中其中一个Promise对象状态都变成resolved或者rejected的时候,才回去调用then。- Promise.catch:
Promise.catch等价于Promise.then(null, rejection)或.then(undefined, rejection)
注:Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个catch语句捕获
【测试1】 reject和catch
【测试2】多个then,return新promise
【测试3】多个then,return 普通值
参考1:MDN:使用 Promise
参考2:透彻掌握Promise的使用,读这篇就够了
参考3:关于promise中reject和catch的问题