javascript - kriskowal/q node.js q.all 和传播

标签 javascript node.js q

我有一个函数需要传递给它的三个先前 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/

相关文章:

javascript - 相当于history.go(-1);在 Mozilla 中

javascript - 工具提示未显示 d3.js

javascript - AngularJS $q 和 promise 以及赋值困惑

angularjs - 在 Angularjs 中打破 promise

javascript - 尝试使用具有顺序 promise 的 for 循环的问题 (q)

javascript - 如何使用 codeigniter(由 javascript 代码捕获的图像)将捕获的图像保存在文件夹中?

javascript - 相册或视频的 Vimeo API 列表返回 200 但没有列表。 (在 native react 中)

javascript - Knex.js 和 MySQL : Casting Integer into Boolean for bulk select

javascript - 包裹JS。使用 --public-url 选项

node.js - 如何处理 nodejs (nowjs) 中 hgetall() 的结果?