Javascript 异步/等待导致循环

Javascript 异步/等待导致循环,javascript,typescript,promise,async-await,Javascript,Typescript,Promise,Async Await,我尝试使用Async/Await,而不是带有承诺的.then()。 使用.then()方法,我的代码运行良好 当我将其更改为Async/Await时,我得到了一个循环 Antother问题:如何在console.log()中禁用承诺 谢谢 ASCBY1 state:2 ASCBY1 state:2 ASCBY1 Promise { <pending> } state:2 ASCBY1 state:2 ASCBY1 state:2 ASCBY1 state:2 ASCBY1 state

我尝试使用Async/Await,而不是带有承诺的.then()。 使用.then()方法,我的代码运行良好

当我将其更改为Async/Await时,我得到了一个循环 Antother问题:如何在console.log()中禁用承诺

谢谢

ASCBY1
state:2
ASCBY1
state:2
ASCBY1
Promise { <pending> }
state:2
ASCBY1
state:2
ASCBY1
state:2
ASCBY1
state:2
ASCBY1
state:2
ASCBY1
state:2
ASCBY1
Promise { <pending> }
state:2
ASCBY1
state:2
ASCBY1
state:2
ASCBY1
state:2
ASCBY1
Promise { <pending> }
state:2
ASCBY1
state:2
ASCBY1
Promise { <pending> }
state:2
ASCBY1
state:2
ASCBY1
state:2
ASCBY1
国家:2
阿斯比1
国家:2
阿斯比1
承诺{}
国家:2
阿斯比1
国家:2
阿斯比1
国家:2
阿斯比1
国家:2
阿斯比1
国家:2
阿斯比1
国家:2
阿斯比1
承诺{}
国家:2
阿斯比1
国家:2
阿斯比1
国家:2
阿斯比1
国家:2
阿斯比1
承诺{}
国家:2
阿斯比1
国家:2
阿斯比1
承诺{}
国家:2
阿斯比1
国家:2
阿斯比1
国家:2
**这很好用**


专用内部环路(i、iArray、计数器、cb){
设tempMod=newmodule(null,ifArray[i].id,ifArray[i].type);
/*按模块分类*/
如果(ifArray[i].timerID==0){//WENN ein Timer ausgeführt iwrd,则表示模块bzw.kein DevType,或者表示“ifArray”laufen.Ohne der&this.mod….表示该模块的开关情况。
如果(!(this.mod==未定义)){
//var tempMod=新模块(iArray[i].id,iArray[i].type);
setTimeout(()=>console.log(tempMod.getState()),1000);
开关(此.mod.modulesRecievedData.DevType){
案例0x0b:{
if(此mod.checkMultiSwitch(iArray[i])){
计数器++;
}
打破
}
案例0x02:{
console.log(“ASCBY1”);
tempMod.getState()。然后((状态)=>{
如果(状态==2)计数器++;
console.log(“状态:+state”);
如果(i0){/*由计时器检查*/
var timerOnState=time[ifArray[i].timerID].timerOnState;
if(timerOnState==true){
计数器++;
}
i++;
如果(i}
Module.getState返回一个承诺

setTimeout(()=>console.log(tempMod.getState()),1000)
正在等待1000毫秒,然后控制台记录
tempMod.getState()
的结果,这是一个未解决的承诺

如果您不想在控制台中获取
Promise{}
。你可以把它改成

setTimeout(()=>tempMod.getState()。然后((结果)=>{
console.log(结果)
}), 1000);

至于循环问题。当您使用
.then()
时。
之后的其余代码将立即运行。特别是
i++
。只有
then
回调中的代码才会延迟

当您将此更改为
时,请等待
。整个函数将停止执行,直到承诺得到解决。这意味着将不执行
i++

我假设ifArray.length
为1,从0开始。因此,当您到达
if(i
时,当使用wait(因为
i++
未执行)时,这将是正确的,这将导致再次调用innerLoop。
同样的事情会不断发生,因为
i++
永远不会执行。

Module.getState返回一个承诺

setTimeout(()=>console.log(tempMod.getState()),1000);
正在等待1000毫秒,然后控制台记录
tempMod.getState()
的结果,这是一个未解决的承诺

如果您不想在控制台中获取
Promise{}
,可以将其更改为

setTimeout(()=>tempMod.getState()。然后((结果)=>{
console.log(结果)
}), 1000);

至于循环问题。当您使用
.then()
时,
.then()
之后的其余代码将立即运行。尤其是
i++
。只有
then
回调中的代码才会延迟

当您将此更改为
wait
时,整个函数将停止执行,直到承诺得到解决。这意味着
i++
将不会执行

我假设
ifArray.length
为1,我从0开始。因此,当使用wait(因为
I++
未执行)时,当您到达
if(I
时,这将是真的,这将导致再次调用innerLoop。 同样的事情会不断发生,因为
i++
永远不会执行