使用bluebird promise.all两次

时间:2016-02-01 13:13:08

标签: javascript promise bluebird

我使用以下代码正常工作!我的问题是,如果有更好的方法来写它或者它可以吗?我使用promise两次但是想验证我正确使用了这个promise吗

var start = function () {
    return Promise.all([
        chi.getCommand(val1,val2),
        chi.findAndUpdateCustomer()
    ]).then(function (args) {
        return Promise.all([chss.exe(runnableDoc, args[0], args[1]),
            Promise.delay(10).then(function (val) {
                val ? console.log(val) : null;
                return app.getStatus(12)
            })
        ])
    })
}();

1 个答案:

答案 0 :(得分:0)

思想:

  • 我希望.spread()而不是.then()按顺序使用Promise.all(),这样可以更容易地使用正确的变量名称。
  • 我不确定封闭的IIFE应该实现什么,让我们摆脱它。
  • 在这种特殊情况下,第二个Promise.all()对我来说似乎是多余的。

所以我的建议是:

var start = Promise.all([
    chi.getCommand(val1, val2),
    chi.findAndUpdateCustomer()
]).spread(function (command, customer) {
    return chss.exe(runnableDoc, command, customer).delay(10).then(function (val) {
        if (val) console.log(val);
        return app.getStatus(12);
    });
});

注释

  • 尝试使用比start更好的名称,即......表示操作的结果,而不是您已开始操作的无关事实。
  • 应该做的10ms延迟是多少?我认为不需要这样做。
  • 在上面的示例val中,将引用chss.exe()调用的结果。但是,在您的设置中,val始终为undefined;我希望这不是意图。
  • 成功承诺链的最终结果将始终为app.getStatus(12)。但是如果出现错误,结果就不清楚了。为了对称起见,您应该添加一个.catch(),以返回不同的应用状态。