如何让for of循环仅在my_value非空时才进入下一次迭代?
问题原因
你的原有实现存在两个核心问题,所以无法达到预期效果:
do...while(0)本身只会执行1次,无论my_value是否为空都会直接结束循环,进入下一轮for of迭代,完全没有重试等待的逻辑my_value是在do块内部声明的块级作用域变量,外部无法访问,判断逻辑也会受影响
正确实现
for (const element of $array) { let my_value // 循环重试直到拿到非空的my_value do { my_value = await GM.getValue("my_value") // 可选:空值时增加100ms延时,避免高频调用浪费性能,可根据需求调整时长 if (!my_value) await new Promise(resolve => setTimeout(resolve, 100)) } while (!my_value) // 到此处my_value已保证非空,可继续写当前迭代的后续业务逻辑 }
注意事项
如果你的业务场景里0、false等假值属于合法有效值,只有null、undefined才算空值,可以把循环判断条件修改为while (my_value == null),避免把合法假值判定为空进入无限等待。
内容的提问来源于stack exchange,提问作者Henrik Petterson
相关产品推荐
相关产品推荐

