解決for循環中異步處理(異步變同步)

前沿:參考ES6語法的async/await的處理機制es6

先上一段代碼異步

function getMoney(){ var money=[100,200,300] for( let i=0; i<money.length; i++){ compute.exec().then(()=>{ console.log(money[i]) //alert(i)
 }) } } //compute.exec()這是個異步方法,在裏面處理一些實際業務
//這時候打印出來的極可能就是300,300,300(由於異步for循環尚未等異步操做返回Promise對象過來i值已經改變)

正確處理思路async

async function getMoney(){ var money=[100,200,300] for( let i=0; i<money.length; i++){ await compute.exec().then(()=>{ console.log(money[i]) //alert(i)
 }) } }
//關鍵字async/await async告訴getMoney方法裏面存在異步的操做,await放在具體異步操做(方法)前面,意思是等待該異步返回Promise纔會繼續後面的操做
 

======另外還有一種遞歸的處理思路spa

function getMoney(i) {
  var money=[100,200,300]
  compute.exec().then(() => {
    
if ( i < money.length ) {  
      console.log(money[i]
);      i++;   getMoney(i);   }  }); }getMoney(0);//開始調用//用遞歸來實現自我循環(具體循環在then裏面,能夠確保前面的compute.exec()的異步操做完成).then()是返回了Promise對象爲resolve後才進行的(能夠了解一下Promise對象)
相關文章
相關標籤/搜索