次のようなオブジェクトとpromiseの配列があるとします。
_[{
a: 1
}, {
a: 4
}, {
a: 4
}, {
promiseSend: [Function],
valueOf: [Function]
}, {
promiseSend: [Function],
valueOf: [Function]
}]
_
これで、I Q.all(arr)
を呼び出してthen()
にオブジェクト値を返すと、何も起こらず、配列にはpromiseオブジェクトが含まれます。 Q.all()
やそのような複雑な配列を操作する方法はありますか?
それがQが機能することになっている方法です。
promiseではなくすべての値を取得するには、.spread()
を使用できます。
_Q.all([a, b]).spread(function (a, b) {
return a + b;
});
_
spread()
コールバックの各引数は、各promiseの結果になります。
このような配列に多くのpromiseがあると思われる場合は、then()
で指定された引数をループして、promiseをその値に置き換えます。
_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!
});
_