Promise
描述
1.Promise的三种状态
- 待定(pending): 初始状态,既没有被兑现,也没有被拒绝。
- 已兑现(fulfilled): 意味着操作成功完成。
- 已拒绝(rejected): 意味着操作失败。
2.构造函数和Promise原型
- Promise():创建一个新的 Promise 对象。该构造函数主要用于包装还没有添加 promise 支持的函数。
- Promise 原型属性:Promise.prototype.constructor。返回被创建的实例函数. 默认为 Promise 函数。
基本使用和创建
1.解决的问题:
- 主要是为了解决异步函数调用时的回调地狱问题(连续执行两个或多个异步操作),采用的是链式调用。其中,then() 函数会返回一个和原来不同的新的 Promise,必须要有返回值,否则callback将无法获取上一个Promise的值。
2.封装setTimeout函数
const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
wait(10000).then(() => saySomething("10 seconds")).catch(failureCallback);
3.创建Promise:
- Promise 对象是由关键字 new 及其构造函数来创建的。该构造函数会把一个叫做“处理器函数”(executor function)的函数作为它的参数。这个“处理器函数”接受两个函数——resolve 和 reject ——作为其参数。
当异步任务顺利完成且返回结果值时,会调用 resolve 函数;而当异步任务失败且返回失败原因(通常是一个错误对象)时,会调用reject 函数。
Promise.all() 和 Promise.race() 方法
Promise.all() 和 Promise.race() 是并行运行异步操作的两个组合式工具。
- Promise.all(iterable):必须所有的都成功
这个方法返回一个新的promise对象,该promise对象在iterable参数对象里所有的promise对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立即触发该promise对象的失败。
这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功回调的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态,它会把iterable里第一个触发失败的promise对象的错误信息作为它的失败错误信息。
Promise.all方法常被用于处理多个promise对象的状态集合。 - Promise.race(iterable):返回更快的结果
当iterable参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象。