Если я уступаю обещанию, он ждет разрешения обещания, прежде чем продолжить
1124 просмотра
1 ответ
Я изо всех сил пытаюсь понять, как использовать функции генератора и итераторы для достижения различных вариантов дизайна библиотеки, о которой я думаю.
Пройдя мимо простых функций генератора, я теперь борюсь с примерами в Интернете, показывающими, как интегрировать генераторы с Promises.
Одна проблема заключается в том, что все статьи написаны до появления спецификации ES2015 для Promises, и все они используют сторонние библиотеки, которые я не знаю, каковы нюансы.
Поэтому вопрос, который я не совсем понимаю, заключается в том, что если вы уступите, и функция генератора вызовет .next (функция возврата Promise), операторы, выходящие за пределы yield, продолжатся, как только будет вызвана функция .next, или когда разрешенное возвращенное обещание разрешится. Примеры показывают, что он ожидает разрешения Обещания, но я не вижу логики того, почему.
Автор: akc42 Источник Размещён: 12.11.2019 09:53Ответы (1)
3 плюса
вызов функции генератора .next (функция возврата обещания)
Нет, это не так. Генератор должен управляться чем-то, он не работает сам по себе.
операторы после выхода продолжаются, как только вызывается функция .next
Да. И это не имеет ничего общего с ценностями, которые вы приносите, будь то обещания или нет.
Чтобы получить ожидаемое поведение, которое .next()
вызывается только после того, как полученное обещание выполнено (или оно .throw
вызывается, когда оно отклоняется), вам нужно запустить генератор таким образом. В отличие от предложенного async
/ await
синтаксиса, генераторы не делают этого сами. И вот тут-то и приходят все эти сторонние библиотеки: вы сами не хотите писать этот материал (и вы не хотите повторяться везде, и вряд ли вы поймете это правильно с первой попытки).
Вопросы из категории :
- javascript Как определить, какой из указанных шрифтов был использован на веб-странице?
- javascript Валидация клиентской стороны ASP.Net
- javascript Длина объекта JavaScript
- javascript Получение текста из выпадающего списка
- javascript Скрипт входа со скрытыми кнопками
- promise jQuery откладывает и обещает - .then () против .done ()
- promise Каковы различия между отложенным, обещанием и будущим в JavaScript?
- promise Что такое std :: prom?
- promise How to include multiple js files using jQuery $.getScript() method
- promise Angular JS: как связать с обещаниями
- generator Выражения генератора и понимание списка
- generator What does the "yield" keyword do?
- generator Длина выхода генератора
- generator выберите один элемент из коллекции: Python
- generator Coroutine vs Continuation vs Generator
- ecmascript-6 What's the difference between using "let" and "var" to declare a variable in JavaScript?
- ecmascript-6 Конечно, у ES6 + должен быть способ объединить два объекта javascript вместе, что это?
- ecmascript-6 Расширяющий класс JavaScript
- ecmascript-6 Что делают фигурные скобки в выражениях `var {...} = ...`?
- ecmascript-6 let keyword in the for loop