2017-09-14 10 views
0

私はthis.companies [i]をthis.companyForFlyersにプッシュしたいと思いますが、これはasyncなので、常に変数iに間違った値が入ります(コードをデバッグするときは常に-1です)。私はこれをどのように修正するのですか?for closure typescriptのforループインデックスにアクセスするには?

else if (category == "Favorite") { 
    for (var i = this.companies.length - 1; i >= 0; i--) { 
    this.storage.get(this.companies[i].CompanyName).then(val => { 
     if (val == "true"){ 
     this.companyForFlyers.push(this.companies[i]) 
     } 
    }); 
    } 
    return; 
} 

答えて

2

問題がvarで宣言された変数は、関数がスコープされることで、ループ製ので、その後の変更は、ループによって捕捉iの値に反映されます。ブロックスコープ変数を作成するには、letを使用してください。

for (let i = this.companies.length - 1; i >= 0; i--) { 
    this.storage.get(this.companies[i].CompanyName).then(val => { 
     if (val == "true"){ 
     this.companyForFlyers.push(this.companies[i]) 
     } 
    }); 
}