Применения generator и promise?

Доброго времени суток.
Изучаю JS и на практике его применяю.
Я знаю отдельно что такое генератор и как он работает, статей на эту тему много и все детально расписано.
Я знаю, что из себя представляют промисы.
Вопрос как они работают вместе, где на практике нужно ставить эти yield или где возвращать состояние промиса?
Направьте на хороший источник или напишите пару примеров.
  • Вопрос задан
  • 1035 просмотров
Пригласить эксперта
Ответы на вопрос 4
politon
@politon
HTML5,CSS3,JS,PHP,SQL,API,canvas,animation...
Комментировать
devellopah
@devellopah
прочитай секцию ES6 Generators In Brief
Ответ написан
Комментировать
ozknemoy
@ozknemoy
яваскриптист
побаловался в свое время генераторами для фронтенда. даже в продакшн сунул. и забыл про него. навсегда. сомнительной нужности вещь. ну а без промисов никуда
через секунду вернет 4
function getPromise() {
  return new Promise((resolve,fail)=> {
    // что либо асинхронное
    setTimeout(()=>resolve(4),1e3)
  })
}

getPromise().then((d)=>console.log(d))

кто то возразит что генераторами можно и нужно последовательно разруливать несколько асинхронных запросов. для этого есть Promise.all
Promise.all([
            httpFactory.get(`reward/${idReward}/view`)
                .then(d=> {
                    this.reward = d.data;
                    this.term = dictFactory.termsDelivery[this.reward.delivery_rules].name;
                    this.reward.date = handleDataFactory.getIntervalDate(this.reward.send_date_from,this.reward.send_date_to);
                    // осталось наград
                    // sell_count == 0 это бесконечность наград
                    this.amountRewD=this.reward.sell_count-(this.reward.collected_count || 0)
                }),
            httpFactory.getAuth()
                .then(d=> {
                    // возвращает 'no' если нет регистрации или она устарела
                    //  под логином возвращает число денег на счету начиная от 0
                    this.isAuth = d.data;//===false? false:d.data;
                    // если фронт под логинон а сервер нет, то
                    if (this.isAuth == 'no' && authFront) userFactory._reLogin(true);
                })
        ]).then(d=> {
            this.getAmountRewD()
        });
Ответ написан
Комментировать
AndKost
@AndKost Автор вопроса
developer
Хорошая статья с примерами
https://habrahabr.ru/post/182620/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы