Javascript 递归承诺链
我目前正在做一个项目,使用一些微服务,其中一个必须反复做同样的事情 代码如下所示:Javascript 递归承诺链,javascript,node.js,promise,Javascript,Node.js,Promise,我目前正在做一个项目,使用一些微服务,其中一个必须反复做同样的事情 代码如下所示: refresh: function(){ return somePromise .then(doA) .then(doB) .then(doC) .catch(error) } 因此,当前另一个函数使用setInterval每秒调用这个“刷新”函数 问题是,由于在refresh方法中这些调用的异步性质,出现了一些错误 我更改了代码,在最后一个“.then”语句中再次递归调用“ref
refresh: function(){
return somePromise
.then(doA)
.then(doB)
.then(doC)
.catch(error)
}
因此,当前另一个函数使用setInterval每秒调用这个“刷新”函数
问题是,由于在refresh方法中这些调用的异步性质,出现了一些错误
我更改了代码,在最后一个“.then”语句中再次递归调用“refresh”方法,并删除了setInterval
refresh: function(){
return somePromise
.then(doA)
.then(doB)
.then(doC)
.then(refresh)
}
现在,这些错误似乎消失了,一切都很正常。
我的问题是:
这是一种好的做法吗?在最后一个“.then”语句中递归调用“refresh”方法是否存在内存问题
这是一种好的做法吗
如果您只想在每次完成时重复,并确保下一次迭代不会在前一次迭代完成之前开始,那么这是一个非常好的实践(比setInterval()
好得多)。如果任何地方出现拒绝,循环都会停止,因此您可能希望使用.catch()
编码应该发生的事情
在最后一个“.then”语句中递归调用“refresh”方法是否存在内存问题
不,没有。由于.then()
始终是异步调用的,因此堆栈始终会展开,而且由于您的链中可能有异步操作,因此应该有时间进行正常的垃圾收集
有关循环期间内存消耗的更多讨论,请参阅
仅供参考,这必须是伪代码,因为定义为属性
refresh:function(){}
的函数不能直接用调用。然后(refresh)
。所以,我假设您在实际代码中正确地做到了这一点
这是一种好的做法吗
如果您只想在每次完成时重复,并确保下一次迭代不会在前一次迭代完成之前开始,那么这是一个非常好的实践(比setInterval()
好得多)。如果任何地方出现拒绝,循环都会停止,因此您可能希望使用.catch()
编码应该发生的事情
在最后一个“.then”语句中递归调用“refresh”方法是否存在内存问题
不,没有。由于.then()
始终是异步调用的,因此堆栈始终会展开,而且由于您的链中可能有异步操作,因此应该有时间进行正常的垃圾收集
有关循环期间内存消耗的更多讨论,请参阅
仅供参考,这必须是伪代码,因为定义为属性
refresh:function(){}
的函数不能直接用调用。然后(refresh)
。因此,我假设您在实际代码中正确地做到了这一点。可能重复的@TomŠabanov的可能重复-这是否回答了您的问题?如果是,请通过单击答案左侧的复选标记向社区指出。这也将为您在这里遵循正确的程序赢得一些声誉积分。如果没有,那么请指出哪些问题尚未得到回答。@TomŠabanov-这是否回答了您的问题?如果是,请通过单击答案左侧的复选标记向社区指出。这也将为您在这里遵循正确的程序赢得一些声誉积分。如果没有,请说明尚未回答的问题。