考虑我有一系列对象和承诺,例如:
[{
a: 1
}, {
a: 4
}, {
a: 4
}, {
promiseSend: [Function],
valueOf: [Function]
}, {
promiseSend: [Function],
valueOf: [Function]
}]
现在,当调用I Q.all(arr)
并返回then()
中的对象值时,没有任何事情发生,我的数组仍包含promise对象。有没有办法使用Q.all()
和这样一个复杂的数组?
答案 0 :(得分:19)
Q应该如何工作。
要获得所有值,而不是承诺,您可以使用.spread()
:
Q.all([a, b]).spread(function (a, b) {
return a + b;
});
spread()
回调的每个参数都是每个承诺的结果,按顺序排列。
如果你认为你在这样的数组中有很多的承诺,那么循环通过then()
中提供的参数并用它的值替换promises:
Q.all(promises).then(function(result) {
for (var i = 0, len = result.length; i < len; i++) {
if (Q.isPromise(result[i])) {
result[i] = result[i].valueOf();
}
}
// Next step!
});