前沿:參考ES6語法的async/await的處理機制 先上一段代碼 1 function getMoney(){ 2 var money=[100,200,300] 3 for( let i=0; i<money.length; i++){ 4 compute.exec().then(()=>{ ...
先上一段代碼
1 function getMoney(){ 2 var money=[100,200,300] 3 for( let i=0; i<money.length; i++){ 4 compute.exec().then(()=>{ 5 console.log(money[i]) 6 //alert(i) 7 }) 8 } 9 } 10 //compute.exec()這是個非同步方法,在裡面處理一些實際業務 11 //這時候列印出來的很可能就是300,300,300(因為非同步for迴圈還沒有等非同步操作返回Promise對象過來i值已經改變)
正確處理思路
1 async function getMoney(){ 2 var money=[100,200,300] 3 for( let i=0; i<money.length; i++){ 4 await compute.exec().then(()=>{ 5 console.log(money[i]) 6 //alert(i) 7 }) 8 } 9 } 10 //關鍵字async/await async告訴getMoney方法裡面存在非同步的操作,await放在具體非同步操作(方法)前面,意思是等待該非同步返回Promise才會繼續後面的操作
另外還有一種遞歸的處理思路
1 function getMoney(i) { 2 var money=[100,200,300] 3 compute.exec().then(() => { 4 if ( i < money.length ) { 5 console.log(money[i]); 6 i++; 7 getMoney(i); 8 } 9 }); 10 } 11 getMoney(0);//開始調用 12 //用遞歸來實現自我迴圈(具體迴圈在then裡面,可以確保前面的compute.exec()的非同步操作完成).then()是返回了Promise對象為resolve後才進行的(可以瞭解一下Promise對象)
轉:https://www.cnblogs.com/xiujun/p/10637037.html