【发布时间】:2020-05-30 23:28:18
【问题描述】:
我尝试使用 Async / Await 而不是 .then() 与承诺。 使用 .then() 方法,我的代码可以正常工作...
当我将其更改为 Async / Await 时,我得到了一个循环
另一个问题:如何在我的 console.log() 中禁用 Promise?
谢谢............
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
**这很好用**
private innerLoop(i,ifArray,counter,cb){
let tempMod = new Module(null, ifArray[i].id,ifArray[i].type);
/*FALLS CHCEK BY MODULE*/
if(ifArray[i].timerID === 0){ //WENN ein Timer ausgeführt iwrd, dann gibt es kein Modul bzw. kein DevType, er muss aber dennoch durch alle Schleifen (ifArray) laufen. Ohne der && this.mod.... würde er bei switch case ein Fehler ausspucken weil es den DevType nicht gibt.
if(!(this.mod === undefined)){
// var tempMod = new Module(ifArray[i].id,ifArray[i].type);
setTimeout(()=>console.log(tempMod.getState()),1000);
switch (this.mod.modulesRecievedData.DevType){
case 0x0b:{
if(this.mod.checkMultiSwitch(ifArray[i])){
counter++;
}
break;
}
case 0x02:{
console.log("ASCBY1");
tempMod.getState().then((state)=>{
if(state == 2) counter++;
console.log("state:"+state);
if(i < ifArray.length){//NUR WENN TIMERID == 0 ist, sonst zählt er den Timer mit obwohl da keine ID + type dahinter steckt.
this.innerLoop(i,ifArray,counter,cb);
}else{
cb(counter);
}
});
break;
}
}
i++;
}
}else if(ifArray[i].timerID > 0){ /*FALLS CHECK BY TIMER*/
var timerOnState = time[ifArray[i].timerID].timerOnState;
if(timerOnState == true){
counter++;
}
i++;
if(i < ifArray.length){//NUR WENN TIMERID == 0 ist, sonst zählt er den Timer mit obwohl da keine ID + type dahinter steckt.
this.innerLoop(i,ifArray,counter,cb);
}else{
console.log("counter3 "+counter);
cb(counter);
}
}
}
这引起看看
private async innerLoop(i,ifArray,counter,cb){
let tempMod = new Module(null, ifArray[i].id,ifArray[i].type);
/*FALLS CHCEK BY MODULE*/
if(ifArray[i].timerID === 0){ //WENN ein Timer ausgeführt iwrd, dann gibt es kein Modul bzw. kein DevType, er muss aber dennoch durch alle Schleifen (ifArray) laufen. Ohne der && this.mod.... würde er bei switch case ein Fehler ausspucken weil es den DevType nicht gibt.
if(!(this.mod === undefined)){
// var tempMod = new Module(ifArray[i].id,ifArray[i].type);
setTimeout(()=>console.log(tempMod.getState()),1000);
switch (this.mod.modulesRecievedData.DevType){
case 0x0b:{
if(this.mod.checkMultiSwitch(ifArray[i])){
counter++;
}
break;
}
case 0x02:{
console.log("ASCBY1");
///////////////////////////////////
//////HERE IS THE CHANGE///////////
///////////////////////////////////
let state = await tempMod.getState();
if(state == 2) counter++;
console.log("state:"+state);
if(i < ifArray.length){//NUR WENN TIMERID == 0 ist, sonst zählt er den Timer mit obwohl da keine ID + type dahinter steckt.
this.innerLoop(i,ifArray,counter,cb);
}else{
cb(counter);
}
break;
}
}
i++;
}
}else if(ifArray[i].timerID > 0){ /*FALLS CHECK BY TIMER*/
var timerOnState = time[ifArray[i].timerID].timerOnState;
if(timerOnState == true){
counter++;
}
i++;
if(i < ifArray.length){//NUR WENN TIMERID == 0 ist, sonst zählt er den Timer mit obwohl da keine ID + type dahinter steckt.
this.innerLoop(i,ifArray,counter,cb);
}else{
console.log("counter3 "+counter);
cb(counter);
}
}
}
模块类
getState(){
let promise = new Promise((resolve)=>{
this.db.getStateOfModule(this._id,this._type,
(data)=>{this._state = data[0].state; resolve(data[0].state);}
);
});
return promise;
}
【问题讨论】:
标签: javascript typescript promise async-await