文章目录
这里有三个function a,b,c 三个方法的执行完成时间依次增加,即t(a)<t(b)<t(c)。
一、Promise.all(iterable)
当我们使用 let p_result = Promise.all([a,b,c]) ,等待所有方法执行完成后返回结果,即若a,b,c未执行完的情况下p_result 的PromiseStatus属性为“pending”,全部执行完后,所有结果中如果有一个为reject的则p_result 的结果为reject,否则为resolve
MDN解释:
Promise.all(iterable)
这个方法返回一个新的promise对象,该promise对象在iterable参数对象里所有的promise对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立即触发该promise对象的失败。这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功回调的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态,它会把iterable里第一个触发失败的promise对象的错误信息作为它的失败错误信息。Promise.all方法常被用于处理多个promise对象的状态集合。(可以参考jQuery.when方法—译者注)
二、Promise.race(iterable)
当我们使用 let p_result = Promise.all([a,b,c]) 执行结果以执行速度为最快的那个方法的结果(这里为a),即如果a的结果是reject则p_result的结果为reject,若a的结果为resolve则p_result的结果为resolve
MDN解释:
Promise.race(iterable)
当iterable参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象。
三、Promise.any(iterable)
MDN解释:
接收一个Promise对象的集合,当其中的一个promise 成功,就返回那个成功的promise的值。
四、 async await
async wait使用就不介绍了,这里说下async wait+promise会使执行顺序按照数组中传递的顺序依次执行。all代码如下(示例):
async function getdate () {
let pr1 = c();
let pr2 = b();
let pr3 = a();
await Promise.all([pr1, pr2, pr3]);
}
mdn链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise