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

JavaScript – генератор – выход/следующий против Асинк-ават

Генератор (ES6)- Функции, которые могут возвращать несколько значений в другой интервал времени, … Помечено начинающими, WebDev, Career, JavaScript.

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

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

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

Пауза и резюме выполняются с использованием урожайности и следующего. Итак, давайте посмотрим на то, что они и что делают.

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

Ключевое слово доходности фактически возвращает объект итераторресульт с двумя свойствами, стоимостью и сделанными. (Не знаю, что такое итераторы и итерации, затем прочитайте здесь).

После приостановки при выходе из выражения выступление, выполнение кода генератора остается приостановленным до тех пор, пока не будет вызван метод следующего () генератора. Каждый раз, когда вызывается метод Generator Next (), генератор возобновляет выполнение и возвращает результат итератора.

PHEWW .. В течение теории, давайте посмотрим пример

function* UUIDGenerator() {
    let d, r;
    while(true) {
        yield 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
            r = (new Date().getTime() + Math.random()*16)%16 | 0;
            d = Math.floor(d/16);
            return (c=='x' ? r : (r&0x3|0x8)).toString(16);
        });
    }
};

Здесь UuidGenerator – это функция генератора, которая вычисляет UUID, используя текущее время случайное число и возвращает нам новый UUID каждый раз, когда он выполняется.

Чтобы запустить вышеуказанную функцию, нам нужно создать объект генератора, на котором мы можем позвонить следующему ().

const UUID = UUIDGenerator();
// UUID is our generator object
UUID.next() 
// return {value: 'e35834ae-8694-4e16-8352-6d2368b3ccbf', done: false}

Uuid.next () Это вернет вам новый uuid на каждом uuid.next () недооценке, и сделано всегда будет ложным, так как мы находимся в бесконечном цикле.

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

Существует много практической реализации генераторов, как и множество библиотек, которые в значительной степени используют его, CO, KOA и Redux-Saga-некоторые примеры.

Традиционно обратные вызовы были переданы и вызываются, когда асинхронная операция возвращалась с данными, которые обрабатываются с использованием обещания.

Асинхрон/жду Специальный синтаксис для работы с обещаниями более комфортно, что удивительно легко понять и использовать. Ключевое слово Async используется для определения асинхронной функции, которая возвращает объект асинкфункции.

Ждет Ключевое слово используется для приостановки выполнения асинхронной функции до тех пор, пока обещание не будет выполнено, это разрешено или отвергается, и для возобновления выполнения асинхродийной функции после выполнения. При возобновлении ценность ожидаемого выражения – это значения выполненного обещания.

  1. Ожидание может использоваться только внутри асинхронной функции.
  2. Функции с ключевым словом Async всегда будут возвращать обещание.
  3. Несколько ожиданий всегда будут работать в последовательном порядке по одной и той же функции.
  4. Если обещание разрешается нормально, то ожидайте, что обещание вернет результат. Но в случае отклонения он бросает ошибку, если на этой строке была операция броска.
  5. Асинхронная функция не может дождаться нескольких обещаний одновременно.
  6. Проблемы производительности могут возникнуть, если использовать ожидание после ожидания столько раз, когда одно утверждение не зависит от предыдущего.

Пока все хорошо, теперь давайте посмотрим на простой пример:-

async function asyncFunction() {

  const promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("i am resolved!"), 1000)
  });

  const result = await promise; 
  // wait till the promise resolves (*)

  console.log(result); // "i am resolved!"
}

asyncFunction();

Выполнение асинхрологии «пауза» в линии ожидает обещания и возобновляется, когда обещание оседает, и результат становится его результатом. Итак, приведенный выше код показывает: «Я решил!» через одну секунду.

  1. Функции/урожайность генератора и асинхронные функции/await можно использовать для написания асинхронного кода, который «ждет», что означает код, который выглядит так, как будто он был синхронным, даже если он действительно асинхронно.

  2. Функция генератора выполняется доходной доходностью, то есть одной экспрессией доходности за раз с помощью его итератора (следующий метод), тогда как Async-Await, они выполняются в ожидании последовательности.

  3. Async/wait облегчает реализацию конкретного использования генераторов.

  4. Возвращаемое значение генератора всегда {value: x, dode: boolean}, тогда как для асинхронной функции это всегда будет обещанием, которое либо будет разрешено до значения x, либо принесет ошибку.

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

Пожалуйста, рассмотрите Ввод вашего письма здесь , если вы хотите, чтобы вас добавили в мой список адресов электронной почты и следуйте за мной на Dev.To, чтобы прочитать статью о JavaScript и на GitHub Чтобы увидеть мой сумасшедший код.

Если что -то неясно, или вы хотите что -то указать, пожалуйста, прокомментируйте ниже.

Спасибо:)

Оригинал: “https://dev.to/dg92/generator-yield-next-async-await-5a”