承诺与Q

时间:2018-02-25 16:22:03

标签: javascript promise q

我想动态创建一系列承诺,将其结果动态传递给下一个承诺。

所以我这样做了(从文档中拿出来)

this.actions.reduce(Q.when, Q());

其中this.actions是一系列返回promises的函数。 [F1,F2,F3。这很好用,我们有一个很好的动态创建的承诺序列。

我现在想做的事情有点复杂,无法找到怎么做(但我相信这是可能的,我只是在这里遗漏了一些东西)。

我希望能够创建相同的东西,但同时执行几个promises(q.all我想的东西) 这是解释: this.actions = [f1,[f2,f3],f4]

执行f1,结果传递给f2和f3。 f2和f3同时执行,两个结果都完成后传递给f4 f4被执行并且可以使用f2& f3结果

所以我们有一系列的承诺,就像第一个例子一样,但是这个序列的一些元素可以是一组承诺,将所有结果传递给序列的下一个元素(另一个承诺或承诺组)。

我想这不是很难,但我对如何构建它感到有点困惑。

非常感谢!

1 个答案:

答案 0 :(得分:1)

您正在寻找

f1().then(x => Q.all([f2(x), f3(x)])).then(f4)

或者,如果将链作为缩减序列编写,

[f1, x => Q.all([f2(x), f3(x)]), f4].reduce(Q.when, Q())

要以编程方式构建同时运行f2f3的函数,您可以使用

function concurrently(fns) {
    return x => Q.all(fns.map(fn => fn(x)));
}

[f1, concurrently([f2, f3]), f4].reduce(Q.when, Q())