12

次のようなオブジェクトとプロミスの配列があるとします。

[{
    a: 1
}, {
    a: 4
}, {
    a: 4
}, {
    promiseSend: [Function],
    valueOf: [Function]
}, {
    promiseSend: [Function],
    valueOf: [Function]
}]

I を呼び出しQ.all(arr)て のオブジェクト値を返すとthen()、何も起こらず、配列には promise オブジェクトが含まれています。Q.all()およびそのような複雑な配列を操作する方法はありますか?

4

1 に答える 1

19

それが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!
});
于 2013-08-09T20:18:19.250 に答える