如果我调用一个返回Promise对象的函数,那么这些异步操作的执行顺序会顺序几次与创建Promise对象的顺序相同吗?
答案 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
的操作所需的时间比1
和3
的操作要长。
答案 1 :(得分:1)
承诺的执行顺序与承诺的创建顺序相同,是的但是他们不一定按照相同的顺序解决。他们将在任务完成时解决,例如api请求已完成,我们将获取数据。