仅当时转到循环迭代的下一个



我有一个for of循环:

for (const element of $array) {
let my_value = await GM.getValue("my_value");
}

工作良好。

现在,当my_value而不是为空时,我只想进入下一个循环迭代。如果它是空的,我希望它在进入下一个迭代之前等待my_value有内容。

到目前为止,我已经尝试了do..while方法:

for (const element of $array) {
do {
let my_value = await GM.getValue("my_value");
if (my_value) continue;
} while (0);
}

但它不起作用。

正确的方法是什么?

这里的简单答案是不应该再做什么了,因为GM.getValue应该只在有值要返回时才解析它的promise。你不应该需要对该方法进行轮询;等待";让它做出回应。

让我用一个模型来说明这一点。在本例中,我的getValue方法在短延迟后解析。这模拟了它做一些工作(也许从数据库加载一些数据,或者从第三方系统接收一些数据——这无关紧要(。我的循环只在发生该操作后继续

const GM = {
getValue: function(input) {
return new Promise(resolve => setTimeout(resolve,2000, input))
}
}

const $array = [1,2,3,4,5];
(async () => {
for (const element of $array) {
let my_value = await GM.getValue("my_value");
console.log(element, my_value);
}
})()

基于以上评论的讨论,我们可以说基于您的代码不需要做while和嵌套循环,您只能通过控制async/await来处理它。。。我设置了一个中断循环的条件,并使等待行为。。。

当循环通过async/awais启动时,它会做什么?循环将等待承诺,你可以做你需要做的…

const sleep = ms => {
return new Promise(resolve => setTimeout(resolve, ms))
}
const forLoop = async () => {
let loop = true;
for (const variable of [1, 2, 3, 4, 5]) { 
await sleep(1000);// Wait
console.log(variable * 2, "DoWhile");// Then do somthing

// Break when you need and base any condition...
if(variable * 2 === 6){
break;
}

console.log(variable, "above")
}
}
forLoop()

https://jsfiddle.net/75o3xh2a/

最新更新