考虑我有一系列的对象和承诺,像:
[{ a: 1 },{ a: 4 },{ promiseSend: [Function],valueOf: [Function] },valueOf: [Function] }]
现在当调用I Q.all(arr)并返回当前()中的对象值时,没有任何事情发生,我的数组还包含promise对象.有没有办法使用Q.all()和这样一个复杂的数组?
解决方法
这就是Q应该是如何工作的.
要获取所有的值,而不是承诺,你可以使用.spread():
要获取所有的值,而不是承诺,你可以使用.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! });