gpt4 book ai didi

javascript - 递归 promise 链

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:43 24 4
gpt4 key购买 nike

我目前正在开发一个使用一些微服务的项目,其中一个微服务必须一遍又一遍地做同样的事情。

代码如下所示:

refresh: function(){
return somePromise
.then(doA)
.then(doB)
.then(doC)
.catch(error)
}

因此,目前另一个函数每秒使用 setInterval 调用此“刷新”函数。

问题在于,由于刷新方法中这些调用的异步性质,会出现一些错误。

我更改了代码,在最后一个“.then”语句中再次递归调用“refresh”方法,并删除了 setInterval。

refresh: function(){
return somePromise
.then(doA)
.then(doB)
.then(doC)
.then(refresh)
}

现在,错误似乎已经消失,一切都运行良好。我的问题是:这是一个好的做法吗?在最后一个“.then”语句中递归调用“refresh”方法是否存在内存问题?

最佳答案

Is this a good practice?

如果您只是希望它在完成时重复,并确保下一次迭代不会在上一次迭代完成之前开始,这是一个非常好的做法(比 setInterval() 好得多)。如果任何地方出现拒绝,您的循环就会停止,因此您可能需要编写 .catch() 应该发生的情况。

Are there any memory problems with calling the "refresh" method recursively in the last '.then' statement?

没有。没有。由于 .then() 始终被异步调用,因此堆栈总是会展开,并且由于您的链中可能有异步操作,因此应该有时间进行正常的垃圾收集。

参见Building a promise chain recursively in javascript - memory considerations有关循环期间内存消耗的更多讨论。

<小时/>

仅供引用,这必须是伪代码,因为定义为属性 refresh: function() {} 的函数不能直接使用 .then(refresh) 调用。所以,我假设您在实际代码中正确地做到了这一点。

关于javascript - 递归 promise 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50764690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com