Обработка синхронного потока в asyn c генераторах JS - PullRequest
2 голосов
/ 27 мая 2020

Я внедряю генератор в свой лог c, и мне непонятно

function *generator {
    yield synchronousFunc()
    yield asyncFunc()
    // should wait till asyncFunc() is completed 
    // before calling next yield
    yield anotherSynchronousFunc() 
    yield ...
}

как он будет работать, если я конвертирую это generator в async generator с помощью async / await для

for await (const item of generator()) {}

, когда большая часть урожаев синхронна.

Как async generator будет обрабатывать синхронную часть урожайности под капотом?

Может быть, это глупо вопрос, но пытаюсь понять как работают генераторы

1 Ответ

2 голосов
/ 28 мая 2020

Вы должны поместить ключевое слово async перед своим генератором, чтобы преобразовать его в асинхронный c генератор.

Вот пример, который вы можете запустить

async function* asyncGenerator() {
  yield 1
  yield 2
  yield Promise.resolve(3)
  yield 4
  yield 5
}

(async () => {
  for await (const n of asyncGenerator()) {
    console.log(n)
  }
})()

Этот ресурс помог мне развить мою интуицию в генераторах и генераторах asyn c.

Что касается того, как asyn c генераторы работают под капотом, это меньше связано с генераторами, а больше связано с asyn c и ожиданием. Вот async / await под капотом

Если вы не используете много рабочих нагрузок с интенсивным процессором в генераторах redux-saga, вы должны быть в порядке, чтобы не беспокоиться о дополнительной упаковке обещаний, которая происходит с генераторами asyn c, даже если большая часть вашего кода - syn c.

...