promise (Promise.all,Promise.race,async await)的理解

  • Post author:
  • Post category:其他




这里有三个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



版权声明:本文为weixin_37815438原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。