【发布时间】:2020-08-03 12:23:24
【问题描述】:
上下文: 我有一个 while 循环,我想运行 10 次,并且在其中我有每 3 秒运行一次的异步/等待代码。如果 while 循环运行了 10 次并且 async/await 检查没有返回预期值,那么它就像超时一样工作,然后退出 while 循环进程超时。
问题:代码的跳出循环部分首先运行,i(循环变量)的值已达到最大值。当我想出我设置它的方式时,我无法访问 i while 循环的值,只有当 i 处于其最大值时。
问题:当条件满足或者我已经筋疲力尽时,我怎样才能尽早退出这个循环?
var i = 0;
//Run 10 Times
while (i < 10) {
//Run every 3 seconds
((i) => {
setTimeout( async () => {
isAuthenticated = await eel.is_authenticated()();
sessionStorage.sessionStatus = JSON.stringify(isAuthenticated);
console.log('------NEW STATUS-------');
console.log(JSON.parse(sessionStorage.sessionStatus).authenticated);
console.log('Inside:' + i);
}, 3000 * i)
})(i++);
//Break out of loop early if condition is met or I is exhausted, but it only runs 1 time and i is always max
if (i === 9 || JSON.parse(sessionStorage.sessionStatus).authenticated) {
console.log('Outside:' + i);
checkStatus('retried');
break;
}
}
注意:如果有人想知道eel.is_authenticated()(); 不是拼写错误,它是一个用于创建桌面应用程序的 python 库,双 ()() 是正常的。
此外,如果这种方法的作用过于复杂,欢迎使用任何其他方法:)
谢谢
【问题讨论】:
标签: javascript while-loop async-await break