Если я уступаю обещанию, он ждет разрешения обещания, прежде чем продолжить

javascript promise generator ecmascript-6

1124 просмотра

1 ответ

3297 Репутация автора

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

Пройдя мимо простых функций генератора, я теперь борюсь с примерами в Интернете, показывающими, как интегрировать генераторы с Promises.

Одна проблема заключается в том, что все статьи написаны до появления спецификации ES2015 для Promises, и все они используют сторонние библиотеки, которые я не знаю, каковы нюансы.

Поэтому вопрос, который я не совсем понимаю, заключается в том, что если вы уступите, и функция генератора вызовет .next (функция возврата Promise), операторы, выходящие за пределы yield, продолжатся, как только будет вызвана функция .next, или когда разрешенное возвращенное обещание разрешится. Примеры показывают, что он ожидает разрешения Обещания, но я не вижу логики того, почему.

Автор: akc42 Источник Размещён: 14.12.2015 12:49

Ответы (1)


3 плюса

414405 Репутация автора

Решение

вызов функции генератора .next (функция возврата обещания)

Нет, это не так. Генератор должен управляться чем-то, он не работает сам по себе.

операторы после выхода продолжаются, как только вызывается функция .next

Да. И это не имеет ничего общего с ценностями, которые вы приносите, будь то обещания или нет.

Чтобы получить ожидаемое поведение, которое .next()вызывается только после того, как полученное обещание выполнено (или оно .throwвызывается, когда оно отклоняется), вам нужно запустить генератор таким образом. В отличие от предложенного async/ awaitсинтаксиса, генераторы не делают этого сами. И вот тут-то и приходят все эти сторонние библиотеки: вы сами не хотите писать этот материал (и вы не хотите повторяться везде, и вряд ли вы поймете это правильно с первой попытки).

Автор: Bergi Размещён: 14.12.2015 12:57
Вопросы из категории :
32x32