我仍然不知道如何使云功能按顺序工作。 这是我的代码:
e2
问题在于功能C在功能B完成之前就启动了。如何使它按顺序工作?在进入下一个功能之前,我真的需要完全完成功能B。
答案 0 :(得分:1)
按顺序运行多个promise(“返回承诺的异步函数”)的规范方法是将它们链接在一起。
bar
此模式可以通用表示,即使用数组和Promise.resolve(init)
.then(result => function1(result)) // result will be init
.then(result => function2(result)) // result will be the result of function1
.then(result => function3(result)); // result will be the result of function2
// overall result will be that of function 3
// more succinctly, if each function takes the previous result
Promise.resolve(init).then(function1).then(function2).then(function3);
调用以可变数量的函数表示:
.reduce()
var funcs = [function1, function2, function3, functionN];
var chain = funcs.reduce((result, nextFunc) => nextFunc(result), Promise.resolve(init));
是一个承诺(链中的最后一个)。链解决后,它将解决。
现在,假设我们具有函数A到G,并且假设chain
是一个值数组:
lambda
const funcSequence = [Function_A, Function_B, Function_C, Function_D, Function_E, Function_F, Function_G];
const chains = lambda
.filter(snap => snap.val().state && Verify(snap.key))
.map(snap => funcSequence.reduce((result, func) => func(snap.key), Promise.resolve(/* init */)));
将是一个承诺链数组(精确地说是每个链的最后一个承诺数组)。所有链将并行运行,但是每个链将按顺序运行。我们现在要做的就是等待所有问题解决。
chains
Todo:添加错误处理。
以上操作也可以通过循环和Promise.all(chains).then(results => console.log(results));
/ async
完成。您可以转换代码,看看哪种方法更好。