Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript、节点、承诺和递归_Javascript_Node.js_Recursion_Bluebird - Fatal编程技术网

Javascript、节点、承诺和递归

Javascript、节点、承诺和递归,javascript,node.js,recursion,bluebird,Javascript,Node.js,Recursion,Bluebird,我无法控制执行流。这是对和的后续操作。从console.log打印输出判断,我的递归例程工作得很好,除了对resolve()的第一次调用(第n次递归调用的一个信号)为后续代码开绿灯,在对递归例程的第一次调用调用resolve()之前,这些代码不应该开绿灯。结果是,对递归例程的第一次调用提供了我想要报告的答案,但当它报告它时,后续代码不再侦听它,而是与一个“未定义”的答案一起愉快地运行。糟糕 我的代码很长,很想在这里分享。我试图写一个问题的小模型,但没有找到复制行为的因素组合 听起来熟悉吗?您如何

我无法控制执行流。这是对和的后续操作。从console.log打印输出判断,我的递归例程工作得很好,除了对resolve()的第一次调用(第n次递归调用的一个信号)为后续代码开绿灯,在对递归例程的第一次调用调用resolve()之前,这些代码不应该开绿灯。结果是,对递归例程的第一次调用提供了我想要报告的答案,但当它报告它时,后续代码不再侦听它,而是与一个“未定义”的答案一起愉快地运行。糟糕

我的代码很长,很想在这里分享。我试图写一个问题的小模型,但没有找到复制行为的因素组合

听起来熟悉吗?您如何对按时发布后续代码的承诺进行适当控制


我想对例程的第一次调用可能会启动一个传递到Promise中的数组。所有调用和以后的调用都会向该数组添加另一个条目。我还没试过。疯狂?

没有看到您的实际代码,我们无法具体回答

听起来熟悉吗?你如何对承诺的发布保持适当的控制 按时跟进代码

答案总是在你准备好要执行的事情之前不要解决承诺链中的第一个承诺,并构建你的承诺链,使依赖的事情在等待的事情得到正确解决之前不会执行。如果某件事情执行得太快,那么您要么调用得太快,要么您的承诺结构不正确。如果没有看到您的实际代码,我们无法确定

一个常见的错误是:

someAsyncOperation().then(someOtherAync()).then(...)
应该是:

someAsyncOperation().then(someOtherAync).then(...)
您应该将引用传递给下一个异步函数,而不是立即调用它并传递其返回值

我想第一次调用例程可能会启动一个数组 传递到承诺中。所有和以后的调用都会向 那个阵列。我还没试过。疯了

您不能将数组传递给
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(...)

如果你不想在这里贴代码墙,你能把代码贴在小提琴上吗?没有代码很难提供帮助。当然,这是一个正确的观点。由于其他原因,无法使用小提琴选项。很抱歉谢谢你,你提供了两种异步控制模式。我用了你喜欢的。我更经常使用“someAsync().then(函数(返回,错误){if(错误)…;returnsomeotherAsync()})。不过,这一点很好。@BaldEagle-你明白了吗?如果没有看到代码的相关部分,我们就无法准确地告诉你代码出了什么问题?因此,如果没有代码,我们所能做的就是胡乱猜测?在我的递归中,总是涉及同一个函数;链中没有其他函数。将其称为a()。将每个解析()转换为a()看起来是一样的;在对最后一个执行resolve()之前,我不知道有任何能力将()解析为第一个,这样它就可以将()解析为之前的一个…向下解析为第一个。但是,依赖于第一次调用完成的代码将在第一个resolve()之后立即启动发布。我完全明白。我对这个代码感到失望。我不想把失望传递给你。很抱歉。@BaldEagle-如果你发布相关代码,我们可以进一步帮助你。如果你不发布相关代码,我们无法进一步帮助你。就这么简单。