2017-05-29 9 views
0

私はasyncとawaitで滝を実装したいと思います。非同期で待機している滝

私は、主な目的は、上記の非同期のいずれかがエラーで拒否した場合、私は非同期関数を呼び出したいしたいんです

にいくつかの手を試してみました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

Shouldn」あなたの主な機能の中で 'signin();を待っているだけです。 –

+0

なぜhttps://stackoverflow.com/a/40593103/1503495はそれらの関数を '呼び出し 'ませんか?申し訳ありませんが、愚かな場合、私はちょうど、非同期と待って始めた。 – codeofnode

+0

でも 'await signin(); 'では1にはなりません。 – codeofnode

答えて

0

2物事:

  • 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

もう1つの質問、もし私がサインインするためにパラメータを渡したいのであれば、最初のサインインが 'hello world'で解決されたら、2番目のサインインはパラメータとして読み込み、 'second hello world' ..など.. ..あなたは私にサンドボックスを与えることができますか?私は現在バベルでやっていますが、共有リンクを見つけることができません。 – codeofnode

+0

@codeofnode: 'async/await' (ある程度は)同期的な方法でコードを書くことができます: 'var result = await signin();結果はsignin( 'second' + result)を待つ; ' –