Рубрики
Без рубрики

Введение в генераторы в JavaScript

Генераторы являются продвинутой концепцией в JavaScript, но они довольно легко понять. Генераторы … с меткой JavaScript.

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

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

Как создать функцию генератора

Существует специальный синтаксис для создания функции генерации, которая не сильно отличается от синтаксиса нормальной функции.

function* generatorFunction(){

}

* После ключевого слова * – это то, что делает эту функцию функцией генератора.

Как использовать функцию генератора, созданную выше

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

function* generatorFunction(){
        console.log("Start")
        yield 7;
        console.log("Midway")
        yield 8;
        console.log("Stop")
}

const gen = generatorFunction();

let result = gen.next();
console.log(result.value) // logs 7
result = gen.next();
console.log(result.value) // logs 8

Посмотрим, что здесь происходит:

  1. Мы определяем функцию генератора, которая сначала дает (возвращает) число 7, а затем дает номер 8. Мы также добавили пару консольных журналов.
  2. Мы называем генераторную функцию здесь и храним возвратное значение в переменной генерал
  3. Обычно при использовании нормальных функций вы ожидаете Gen переменная для сохранения значения 7.
  4. Но это не тот случай для генераторов. Gen Переменная не хранит значение, полученное генератором, вместо этого она хранит Генератор объект возвращен генераторная функция
  5. Gen У объекта есть метод Next ()
  6. Первый звонок Gen.Next () Метод запускает выполнение функции генератора и когда он достигает урожай , он останавливает там функцию и возвращает объект, который имеет 2 свойства ценность и Готово Анкет Значение это утеющее значение и Готово это логическое, которое говорит нам о том, выполняется ли функция генератора полностью выполнять или нет
  7. Итак, в приведенном выше примере, когда Gen.Next () Впервые вызывает функцию генератора. «Start» регистрируется в консоли, а затем генератор дает значение 7. Именно тогда она останавливает функцию и возвращает объект, который (в данном случае) будет {value: 7, dode: false} Анкет значение это выходное значение, которое равно 7. Готово это ложный Потому что генератор еще не полностью выполнен; В функции еще есть несколько строк кода, которые еще предстоит выполнить. “7” зарегистрировано в консоли.
  8. Следующий (второй) звонок Gen.Next () Метод возобновляет функцию генератора с точки зрения, на которой он остановился раньше. Таким образом, «Midway» регистрируется на консоли, а затем генератор дает значение 8. Он останавливает функцию там и возвращает {value: 8, dode: false} Поскольку выходное значение составляет 8, а функция до сих пор не выполняется. ” 8 “зарегистрировано в консоли.
  9. “Останавливаться” никогда не регистрируется в консоли, так как мы никогда не называем Gen.Next () опять таки

Заметки

  • В приведенном выше примере, если мы называем Gen.Next () В третий раз «Stop» будет регистрироваться на консоли, а возвращенным объектом будет {value: undefined, Dode: true} Анкет Обратите внимание, как это время имущество, которое верно? Это потому, что весь код генератора выполняется. В то время как свойство стоимости не определен? Это потому, что генератор не было дано. Если вы продолжаете звонить Gen.Next () После этого результатом всегда будет {value: undefined, Dode: true}
  • Объект генератора не может быть перезапущен. После того, как это сделано полностью выполнять, вы не можете перезапустить его. Если вы хотите снова запустить функцию генератора, сделайте новый Генератор объект, вызывая генераторная функция и хранить его в новой переменной. Тогда вы можете работать с этой переменной.

    • Пример:

Оригинал: “https://dev.to/parth2412/introduction-to-generators-in-javascript-5hn8”