我有一个函数需要传递给它的三个先前 promise 的结果。一个是线性相关的,另外两个可以同时运行。我想使用 q.all 解决三个 promise ,然后使用 .spread 将结果传递给第四个。但是我的代码不起作用。任何帮助将不胜感激。
var p1 = doWork(data);
var p2 = p1.then(doMoreWork);
var p3 = doConcurrentWork(data);
return q.all([p1,p2,p3]).spread(funcWith3params)
.fail(function(err) {
console.log(err):
}
我可以在 node-inspector 中跟踪代码,看到前 3 个 promise 被调用了。但是,没有调用 .spread 调用的函数。关于为什么的任何线索? .fail 也没有被击中。
最佳答案
在内部传播调用 q.all。
这是从 q.js 传播的代码:
Q.spread = spread;
function spread(promise, fulfilled, rejected) {
return when(promise, function (valuesOrPromises) {
return all(valuesOrPromises).then(function (values) {
return fulfilled.apply(void 0, values);
}, rejected);
}, rejected);
}
请注意,它需要一个解析为数组或数组的 promise 作为第一个参数。
因此你的电话应该是这样的:
var p1 = doWork(data);
var p2 = p1.then(doMoreWork);
var p3 = doConcurrentWork(data);
return q.spread([p1,p2,p3], funcWith3params, function(err) {
console.log(err):
});
但是,您的原始调用也应该有效。不知道为什么没有。
关于javascript - kriskowal/q node.js q.all 和传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17058371/