承诺的解决顺序是否与Promise.sexel中提到的顺序相同
Is the resolution order of promises same as the order in which it is mentioned in Promise.settle?
我有两个承诺,在我向客户端返回响应之前,应该先解决。
我在用蓝鸟。
Promise
.settle([prmoise1(), promise2()])
.then(function(results){
results.forEach(function(result){
if(result.isFulfilled()){
console.log(result);
}
});
});
承诺的解决顺序是什么
在这种情况下,promise1()总是首先解决吗
如果没有,我们如何访问与promise()关联的结果?
在您的代码中,您的两个promise生成的函数被相继调用,它们将按照自然时间导致它们在中完成的顺序完成。如果promise2()
是一个非常快的异步操作,它很可能在promise1()
之前完成,因此它将在另一个之前解决它的promise。或者,情况很可能相反。换句话说,没有保证,因为它完全取决于每个异步操作的时间。当以这种方式运行异步操作时,您是在并行运行它们(两者同时运行)。
Promise.settle()
生成的结果数组将始终按照最初指定的顺序,就像Promise.all()
一样,因此Promise.settle(...).then(function(results) {})
结果数组中的第一项将始终属于promise1()
,第二项属于promise2()
。
注意:Promise.settle()
似乎已从最新版本的Bluebird中删除。您可以在每个生成的promise上使用.reflect()
来模拟这种行为,如下所述。事实上,在最新版本的蓝鸟中,你可以这样做:
Promise.all([promise1().reflect(), promise2().reflect()]).then(function(results){
results.forEach(function(result){
if(result.isFulfilled()){
console.log(result);
}
});
});
在最新的Bluebird中,您可以制作自己的Promise.settle()
,它可以与一系列承诺配合使用:
Promise.settle = function(array) {
var reflects = [];
if (array) {
reflects = array.map(function(item) {
// if it's a promise with .reflect(), call `.reflect()`
if (typeof item.then === "function" && typeof item.reflect === "function") {
return item.reflect();
} else {
// cast into a promise and call .reflect()
return Promise.resolve(item).reflect();
}
});
}
return Promise.all(reflects);
}
否,与.all()
一样,所有操作都会同时调用*,并且承诺会在任何时候解析。
然而,results
数组将始终按照承诺的原始数组的顺序排列,因此results[0]
将是promise1()
的结果。
*它们被一个接一个地调用,但我们不会等到第一个完成才开始第二个
- 使用promise或setTimeout确定延迟函数的调用顺序
- 使用Node中的Q promise库对值数组顺序调用/执行相同的函数;并返回带有结果的新数组/集合
- For循环以错误的顺序返回promise
- jQuery Deferred和Promise用于同步和异步函数的顺序执行
- Promise.all:解析值的顺序
- 如何在可以按各种顺序调用的函数中使用 promise
- 尝试使用具有顺序promise(q)的循环的问题
- 在for循环中按顺序执行promise
- 如何在Javascript中使用Q顺序运行promise
- 承诺的解决顺序是否与Promise.sexel中提到的顺序相同
- 可以Promise按顺序加载多个url
- ajax调用出现故障时的顺序延迟promise
- 如何使用jQuery延迟promise来顺序执行许多任务
- 如何使用promise强制执行特定的执行顺序
- Promise中同步执行的顺序
- 从Q Promise开始运行并获得顺序进度
- Q promise:都是按注册顺序调用的回调函数
- Promise.all()没有按照预期的顺序解析承诺
- 按顺序尝试2个请求(前端,javascript, promise)
- Promise的调度顺序.然后在Promise.all中分组