顺序Firebase云功能承诺

时间:2018-12-09 17:19:51

标签: node.js google-cloud-functions

我仍然不知道如何使云功能按顺序工作。 这是我的代码:

e2

问题在于功能C在功能B完成之前就启动了。如何使它按顺序工作?在进入下一个功能之前,我真的需要完全完成功能B。

1 个答案:

答案 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完成。您可以转换代码,看看哪种方法更好。