承诺与 Q 的序列组合
promises sequence combination with Q
我想动态创建 一系列承诺,动态地将其结果传递给下一个承诺。
所以我这样做了(从文档中获取)
this.actions.reduce(Q.when, Q());
其中 this.actions 是 return 承诺的函数数组。 [f1,f2,f3]。这运行良好,我们有一个很好的动态创建的承诺序列。
我现在想做的有点复杂,找不到怎么做(但我相信这是可能的,我只是在这里遗漏了一些东西)。
我希望能够创建相同的东西,但同时执行多个承诺(我猜是 q.all)
这是解释:
this.actions = [f1,[f2,f3],f4]
f1 被执行,它的结果被传递给 f2 和 f3。
f2 和 f3 同时执行,两个结果都在完成后传递给 f4
f4被执行,可以使用f2&f3结果
所以我们有一个像第一个例子一样的承诺序列,但是这个序列的一些元素可以是一组承诺,将它们的所有结果传递给序列的下一个元素(另一个承诺或一组承诺)。
我想这并不难,但我对如何构建它有点困惑。
非常感谢!
您正在寻找
f1().then(x => Q.all([f2(x), f3(x)])).then(f4)
或者,如果将链写成归约序列,
[f1, x => Q.all([f2(x), f3(x)]), f4].reduce(Q.when, Q())
要以编程方式构建同时运行 f2
和 f3
的函数,您可以使用
function concurrently(fns) {
return x => Q.all(fns.map(fn => fn(x)));
}
[f1, concurrently([f2, f3]), f4].reduce(Q.when, Q())
我想动态创建 一系列承诺,动态地将其结果传递给下一个承诺。
所以我这样做了(从文档中获取)
this.actions.reduce(Q.when, Q());
其中 this.actions 是 return 承诺的函数数组。 [f1,f2,f3]。这运行良好,我们有一个很好的动态创建的承诺序列。
我现在想做的有点复杂,找不到怎么做(但我相信这是可能的,我只是在这里遗漏了一些东西)。
我希望能够创建相同的东西,但同时执行多个承诺(我猜是 q.all) 这是解释: this.actions = [f1,[f2,f3],f4]
f1 被执行,它的结果被传递给 f2 和 f3。 f2 和 f3 同时执行,两个结果都在完成后传递给 f4 f4被执行,可以使用f2&f3结果
所以我们有一个像第一个例子一样的承诺序列,但是这个序列的一些元素可以是一组承诺,将它们的所有结果传递给序列的下一个元素(另一个承诺或一组承诺)。
我想这并不难,但我对如何构建它有点困惑。
非常感谢!
您正在寻找
f1().then(x => Q.all([f2(x), f3(x)])).then(f4)
或者,如果将链写成归约序列,
[f1, x => Q.all([f2(x), f3(x)]), f4].reduce(Q.when, Q())
要以编程方式构建同时运行 f2
和 f3
的函数,您可以使用
function concurrently(fns) {
return x => Q.all(fns.map(fn => fn(x)));
}
[f1, concurrently([f2, f3]), f4].reduce(Q.when, Q())