javascript中的承诺顺序

时间:2018-06-02 16:56:47

标签: javascript asynchronous promise

如果我调用一个返回Promise对象的函数,那么这些异步操作的执行顺序会顺序几次与创建Promise对象的顺序相同吗?

2 个答案:

答案 0 :(得分:2)

这取决于函数的实现,以及“执行那些异步操作”的含义。

通常,返回promise的函数会同步启动异步操作,就是这样:启动操作。然后操作继续并独立于启动它的功能完成。

所以,如果你这样做:

var p1 = foo(1);
var p2 = foo(2);
var p3 = foo(3);

...并且foo在您调用它时同步启动异步操作,然后是,async操作将按照承诺的创建顺序启动

意味着他们按顺序继续或完成,事实上他们可能不会。这取决于有问题的操作。

示例:

function foo(value) {
  return new Promise(resolve => {
    console.log("starting " + value);
    setTimeout(function() {
      console.log("completing " + value);
      resolve(value);
    }, value == 2 ? 800 : 200);
  });
}
var p1 = foo(1);
var p2 = foo(2);
var p3 = foo(3);
// Naturaly, in real code, we'd have error handlers on those

foo按顺序启动操作,但它们不按顺序完成,因为2的操作所需的时间比13的操作要长。

答案 1 :(得分:1)

承诺的执行顺序与承诺的创建顺序相同,是的但是他们不一定按照相同的顺序解决。他们将在任务完成时解决,例如api请求已完成,我们将获取数据。