2016-10-04 9 views
2

を待つ:違いコの間、私は本当にこのコードの違いを理解していないよ

co(function *() { 
    const val = yield aPromise(); 
    return val; 
}) 
.then((val) => doSomethingWith(val), (err) => doSomethingWith(err)); 

この他の1:

async function() { 
    try { 
     const val = await aPromise(); 
     doSomethingWith(val); 
    } catch (err) { 
     doSomethingWith(err); 
    } 
} 

長所/短所(パフォーマンスの面ではどのようなものです(node.js)で使用される各コードのコードと(なぜなら、に依存している)コールド(co external libraryに依存する)または待機する必要がある(なぜなら、ES7にはまだ含まれていない)

+0

比較が意味をなさないので、私はこの質問をトピックとして閉じようとしています。 – Amit

+0

両方の場合に過剰殺害:)。 'aPromise()。then()'で十分でしょう。 :) –

+0

@なぜそれが意味をなさないのでしょうか?あなたは少し理解して説明していただけますか?主な問題は、なぜそれが意味をなさないのかわかりません... – David

答えて

3

あなたが示されてきたサンプルコードのための2つの大きな違い:

は今、私はあなたが実際にある

var example = co.wrap(function *() { 
    try { 
     const val = yield aPromise(); 
     doSomethingWith(val); 
    } catch (err) { 
     doSomethingWith(err); 
    } 
} 

async function example() { 
    try { 
     const val = await aPromise(); 
     doSomethingWith(val); 
    } catch (err) { 
     doSomethingWith(err); 
    } 
} 

おそらく

function example() { 
    return aPromise().then(doSomethingWith).catch(doSomethingWith); 
} 

(最後のものは、実際に持っている別の動作を比較するために何を望むかと思いますaPromiseが同期的にスローした場合、whiだから、

パフォーマンス

は重要ではありませんを議論することができます)

を当然のことながら、それををchやるべきではありません。本当にありません。 3番目のものは最速であるかもしれませんが、それは最も少ない量の約束を作成し、他の2つはまだエンジンでうまく最適化されていないからです。

可読性

自分を選択してください。最初の2つはほぼ同等ですが、coは少し醜い(ジェネレータ構文を乱用しています)。複雑な制御フローを持つすべての場合、この利点はすぐに失われますが、3つ目は非常に簡潔であり、そのために好まれる可能性があります。長所/短所の問題ではありません

フロー制御

、それはあなたが望む1にする必要があります。

なぜ使用する必要がありますか?

coが、それ以上を使用すべきではありません、それが標準ES8(ES2017)async/awaitに取って代わら(まだ公開されていないが、それでも)です。これは、(ES6はサポートしていますが、ES8はサポートしていない環境で)トランスペアラのターゲットとして使用することも、将来の互換性のために使用することもできます。

関連する問題