2016-06-13 6 views
1

これはあまりにも漠然としていますが、約束事ではなくES6ジェネレータ機能を使用する利点は何ですか?私は現時点で優位性を見ておらず、誰かがそれに光を当てることを望んでいた。例えばES6 Generator Function vs Promises

、非同期にデータを取得する:発電機は、自分の状態を維持し、ループとアルゴリズムを記述するための強力なツールを提供しながら、

/* Using promises */ 
fetch('api-endpoint') 
    .then(resp => response.json()) 
    .then(name => obj.name) 
    .then(x => console.log('Name: ', name)) 

//VS 

/* As a generator function and assuming we have required node-fetch */ 
run(function *() { 
    const url = 'api-endpoint'; 
    const resp = yield fetch(url); 
    const obj = yield response.json(); 
    const name = yield obj.name; 
    console.log("Name available here: ", name); 
} 

function run(genFunc) { 
    const iterator = genFunc(); 
    const iteration = iterator.next(); 
    const promise = iteration.value(); 
    promise.then(x => { 
     const additionalIterator = iterator.next(x); 
     const additionalPromise = iterator.value; 
     additionalPromise.then(y => iterator.next(y)); 
    }); 
} 
+1

かなり曖昧です。あなたはそれらを使って同様のことをする方法を示すことができますか? – 4castle

+0

問題ありません、例を追加します。 –

答えて

2

約束は、非同期イベントを扱います。コレクション内の各項目を処理MDN Iterator and generators page

から

は非常に一般的な 操作です。 JavaScriptでは、単純なforループからmap()およびfilter()に至るまで、 コレクションを繰り返し処理するさまざまな方法が用意されています。イテレータと ジェネレータは、繰り返しの概念をコアの 言語に直接持ち込み、 ... forループの動作をカスタマイズするためのメカニズムを提供します。

だから、2つの非常に異なる問題を解決することを意図していると思います。

あなたの例のように、you could use generators instead of promisesと言われていますが、私はそれが意図していたとは思いません。

+0

いいえ、私はそれをupvotedので、それは便利なコメントです。私は、非同期イベントを扱う面でしか見ていませんでしたが、ループのブロックなどを処理するときには、実際にはもっと実用的なようです。 –

+0

確かに私は自分自身の問題の専門家から遠いです。それがあなたを助けたなら、先に進んでそれを受け入れることができます;)@DanWeber –

関連する問題