gpt4 book ai didi

javascript - 在 ASYNC AWAIT 中循环

转载 作者:搜寻专家 更新时间:2023-11-01 00:36:41 25 4
gpt4 key购买 nike

我有一些代码可以通过网络调用不断更新一系列对象,如下所示。我想知道这是否是不好的做法,是否有更好的方法。我不能使用 Set Interval,因为 MakeAsyncCall 回复之间的时间是可变的,如果进行调用的时间长于延迟,则可能导致泄漏。我将使用此信息来更新 UI。这样会不会造成阻塞?你的想法是什么?如果您需要更多信息,请告诉我。

let group = [item1, item2, item3];

// Start Loop
readForever(group, 100);

// Function to Delay X ms
const delay = ms => {
return new Promise((resolve, _) => {
const timeout = setTimeout(() => {
resolve();
}, ms);
});
};

// Function to continuously Make Calls
const readForever = async (group, ms) => {
while(true) {
// Make Async Call
for (let item of group) {
await MakeAsyncCall(item);
}

// Wait X ms Before Processing Continues
await delay(ms);
}
};

最佳答案

给定的代码不会导致任何 UI 阻塞。并且是持续更新 UI 的有效方式。

你可以这样写而不是循环:

const readForever = async (group, ms) => {
// Make Async Call
for (let item of group) {
await MakeAsyncCall(item);
}

// Wait X ms Before Processing Continues
await delay(ms);

if (true) { // not needed, but there you could define an end condition
return readForever(group, ms);
}
};

除了关于delay函数的注释:
您可以直接将 resolve 传递给 setTimeout,因为您不会在任何地方取消超时,所以您不需要将结果 setTimeout 存储在多变的。

const delay = ms => {
return new Promise(resolve => setTimeout(resolve, ms));
};

关于javascript - 在 ASYNC AWAIT 中循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49155139/

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