Javascript 只有在以下情况下,才能转到循环迭代的下一步

Javascript 只有在以下情况下,才能转到循环迭代的下一步,javascript,jquery,Javascript,Jquery,我有一个for of循环: for (const element of $array) { let my_value = await GM.getValue("my_value"); } 很好 现在,我只想在my_值不为空时转到下一个循环迭代。如果它是空的,我希望它在进入下一个迭代之前等待my_value有内容 到目前为止,我已经尝试了do..while方法: for (const element of $array) { do { let my_val

我有一个
for of
循环:

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

现在,我只想在
my_值
不为空时转到下一个循环迭代。如果它是空的,我希望它在进入下一个迭代之前等待
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
应该只在它有值返回时解析它的承诺。您不需要轮询该方法来“等待”它的响应

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

const GM={
getValue:函数(输入){
返回新承诺(resolve=>setTimeout(resolve,2000,输入))
}
}
常量$array=[1,2,3,4,5];
(异步()=>{
for(常量元素$array){
让我的价值=等待GM.getValue(“我的价值”);
log(元素,我的值);
}

})()
基于上面评论中的讨论,我们可以说基于您的代码不需要执行while和嵌套循环,您可以通过控制
异步/wait
仅处理它…我为中断循环设置了一个条件并使等待行为

当通过
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()

只需使用
break
语句示例:for(数组的const元素){if(element==2)break;console.log(element)}@AneesHikmatAbuHmiad这是什么意思?我的目标是遍历所有数组元素。我只想在
my_value
不为空时继续循环。因此,基本上,“等待”等待
my_value
有内容。@Henrikpeterson这就是wait所做的,假设你在承诺中使用它。@KevinB请发布一个答案来说明这一点。我们需要更多信息。什么是GM.getValue?它做什么,它是如何做的。如果它像任何其他承诺一样,在它有价值之前是无法解决的。如果它是一个立即返回的同步方法,
await
对于这个目的是无用的,您需要每隔n秒检查一次。。。效率极低,但只需要多一点代码就可以了。(我不会提供后者的例子,因为这是一个相当糟糕的做法。)更好的选择是在后者中修复GM.getValue。