2017-05-17 3 views
0

ES2017 async/await機能が優れています。再帰コールバックを書くことの苦痛を軽減します。しかし、いつかnode39のランタイム警告がunhandled promise rejectionのように表示されます。その理由は、それを聞かせすることは非常に簡単になりますが、コードの例からわかるように、私はすべての単一の関数呼び出しでawaitを入れない限り、私は、asyncコードブロックノード内のコードブロックを待つ方法またはツールが必要です

function action1Async() { 
    return new Promise((resolve, reject) => { 
    resolve('good name async function') 
    }) 
} 
async function action2() { 
    return new Promise((resolve, reject) => { 
    reject('bad name async function') 
    }) 
} 

async function main() { 
    const r1 = await action1Async() 
    const r2 = action2() // The name is bad, I dont realize it is an async function. Actually throw an exception 
    return r1 + r2 
} 

内のあらゆる場所awaitを置くことを忘れていたということですコードが間違っています。私は、を発明してasyncブロック内の行動を制御するESドラフトコミュニティがある理由があると信じています。

正しいコードを書いても問題はありません。しかし、私はそれがあまりにも多くのawaitをコードブロックの中に書くことはあまりにも包括的であると思います。コルーチンのように、コードブロック内のすべての約束を自動的に解決することは可能ですか?いくつかの静的ツールやマジカルJSライブラリでは?あなたが値の配列としてあなたの結果を[OK]を処理している場合には、事前に

おかげ

答えて

1

Promise.all機能がうまく動作します。

async function main() { 
    const r1 = await action1Async() 
    const r2 = action2() // The name is bad, I dont realize it is an async function. Actually throw an exception 
    return Promise.all([r1, r2]).then(function (res) { 
     return res[0] + res[1]; 
    }) 
} 

main() 
.then(console.log) 
.catch(console.log); 
関連する問題