2017-05-29 157 views
0

我想實現與異步瀑布和等待。與異步瀑布和等待

我經歷了this嘗試了一些手在

主要目的是我不希望要調用異步函數,如果以上任何異步一個有錯誤拒絕。

var cont = 1; 

function signin(){ 
    console.log(cont); 
    // i am doing some async 
    return new Promise((a,b)=>{ 
    if((++cont) === 4){ 
     setTimeout(1000*cont,b,'ab');  
    } else { 
     setTimeout(1000*cont,a,'ab'); 
    } 
    }) 
} 

async function main() { 
    try { 
    await signin; 
    await signin; 
    await signin; 
    await signin; 
    await signin; 
    await signin; 
    await signin; 
    return signin(); 
    } catch(er){ 
    return er; 
    } 
} 

main() 

在上面,沒有按預期工作。 我的預期輸出輸出是什麼

1 
2 
3 
4 

第四之後,它應該打破所有的方式。其他的登錄嘗試不應該被調用。

所有登錄必須串聯執行。就像在瀑布一樣。

任何幫助?

+0

不該」它是'等待登錄();'在你的主函數中,你只是'等待登錄;'。 –

+0

爲什麼https://stackoverflow.com/a/40593103/1503495沒有'調用'這些函數?對不起,如果這是愚蠢的,但我剛剛開始,異步和等待。 – codeofnode

+0

即使有'await signin();'它不會在1之後。 – codeofnode

回答

0

兩件事情你需要改變:setTimeout函數

    • 參數與paranthesis調用登入功能,如:伺機簽到()

      var cont = 1; 
          function signin(){ 
          console.log(cont); 
          // i am doing some async 
          return new Promise((resolve, reject)=>{ 
          if((++cont) === 4){ 
           setTimeout(reject(cont),1000*cont); 
          } else { 
           setTimeout(resolve(cont),1000*cont); 
          } 
          }) 
      } 
      
      async function main() { 
          try { 
          await signin(); 
          await signin(); 
          await signin(); 
          await signin(); 
          await signin(); 
          await signin(); 
          await signin(); 
          return signin(); 
          } catch(er){ 
          console.log("error: " +cont); 
          return er; 
          } 
      } 
      
      main() 
      
  • +0

    還有一個問題,如果我想傳遞參數來登錄,說什麼......說第一個登錄用'hello world'解決的時候,第二個登錄應該把它作爲參數讀取,然後加上'second',以使得登錄應該接收爲'second hello world'..等等..,你可以給我一個沙箱..我目前正在做babel嘗試,但我沒有能夠找到共享鏈接 – codeofnode

    +0

    @codeofnode:'async/await'讓你以同步的方式編寫代碼(在某種程度上):'var result = await signin();結果=等待登錄('秒'+結果);' –