gpt4 book ai didi

javascript - 我应该如何循环依赖于前一个循环值的异步函数?

转载 作者:行者123 更新时间:2023-11-28 07:47:35 24 4
gpt4 key购买 nike

我在 Node.js 中尝试执行的同步版本(为了便于阅读而进行了简化):

var value = null;
var allValues = [];
do{
value = getValue(value); //load the next value
if(value) allValues.push(value);
}while(value);
console.log("Got all values:",allValues);

目标是迭代所有值,但是除非我传入当前值,否则 getValue 函数将仅返回第一个值(导致无限循环)。

在node.js中,getValue()函数是异步的,我希望它是异步的,但是如果我这样做:

var allValues = [];
function iterateGetValue(value){
if(value){
allValues.push(value);
getValue(value,iterateGetValue);
}else console.log("Got all values:",allValues);
}
getValue(null,iterateGetValue);

我担心 N 次迭代(getValue 在到达结束之前可能会触发数千次)我会遇到堆栈限制问题(我错了吗?)。我研究了 Promises 和其他异步技巧,但在我看来,所有这些技巧都在继续插入堆栈(我错了吗?)。

我的堆栈限制假设是否不正确,或者是否有一些我缺少的明显方法可以做到这一点?

此外,我不能忙着等待将异步 getValue 转换为同步 getValue,这违背了使用异步的全部目的。

最佳答案

I'll hit a stack limit

不,你不会。如果它们确实是异步的,那么对 iteratGetValue 的下一次调用将在一个新的堆栈帧中 - 源自异步回调处理程序的顶级执行上下文。 Promise 也是如此 - some of which甚至要求是异步的。

关于javascript - 我应该如何循环依赖于前一个循环值的异步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27256297/

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