我无法控制执行流程。这是node.js, bluebird, poor control of execution path和node.js table search fails with promises in use的后续内容。从console.log打印输出来看,我的递归例程工作得很好,除了第一次调用resolve()(第n次递归调用的信号)给后续代码提供了绿灯,不应该得到那个绿灯直到第一次调用递归例程调用resolve()。事实证明,对递归例程的第一次调用提供了我想要报告的答案,但是当它报告它时,后续代码不再监听它并且正在运行幸福与“未定义”的答案。坏。
我的代码很长时间在这里分享。我试着写一个小问题的模型,但没有找到复制行为的因素组合。
听起来很熟悉?你如何保持对Promises按时发布后续代码的适当控制?
我想也许第一次调用例程可能会启动一个传递给Promise.all的数组,之后的调用会向该数组添加另一个条目。我没试过。疯狂?
答案 0 :(得分:0)
如果没有看到您的实际代码,我们无法专门回答。
听起来很熟悉?你如何保持对Promises释放的适当控制 按时跟进代码?
答案总是要解决链条中的第一个承诺,直到你准备好执行事物并构建你的承诺链,这样依赖的东西才能被执行,直到他们等待的东西已经妥善解决了。如果某件事情过早执行,那么您要么过早地调用某些内容,要么您的承诺结构不正确。如果没有看到您的实际代码,我们无法确定。
常见的错误是:
someAsyncOperation().then(someOtherAync()).then(...)
应该是:
someAsyncOperation().then(someOtherAync).then(...)
你应该传递对下一个异步函数的引用,而不是立即调用它并传递它的返回值。
我想也许第一次调用例程就可以启动一个数组 传入Promise.all后来调用会添加另一个条目 那个数组。我还没有尝试过。疯狂?
您无法将数组传递给Promise.all()
,然后再将内容添加到数组中 - 这不是Promise.all()
支持的功能。您可以将后续内容链接到Promise.all()
的结果上,或者执行另一个Promise.all()
,其中包含之前Promise.all()
的承诺以及更多承诺。
var someArrayOfPromises = [...];
var pAll = Promise.all(someArrayOfPromises);
var someMorePromises = [...]
someMorePromises.push(pAll);
Promise.all(someMorePromoises).then(...)