2016-06-13 3 views
1

Пожалуйста, дайте мне знать, если это слишком смутно вопрос, но каковы преимущества использования функции генератора ES6 в отличие от обещаний? Я не вижу преимущества в данный момент и надеялся, что кто-то может пролить свет на него.Функция генератора ES6 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 предоставляет несколько способов итерации по коллекции , от простых для циклов до map() и filter(). Итераторы и Генераторы вводят концепцию итерации непосредственно в ядро ​​ и предоставляют механизм для настройки поведения для ... циклов.

Поэтому я думаю, что они предназначены для решения двух очень разных проблем.

Сказав это, you could use generators instead of promises, как и в вашем примере, но я не думаю, что это то, для чего они предназначены.

+0

Нет проблем, это полезный комментарий, поэтому я его поддержал. Я только смотрел на них с точки зрения борьбы с асинхронными событиями, но они, безусловно, кажутся более практичными, когда речь идет о блокировке петель и т. Д. Просто пытаюсь обернуть вокруг себя голову. –

+0

Конечно, я далек от эксперта по этому вопросу. Вы могли бы пойти и принять его, если это вам помогло;) @DanWeber –

Смежные вопросы