Есть ли способ реализовать <T>(x: Promise<AsyncIterableIterator <T >>): AsyncIterableIterator<T> в TypeScript?

Итак, я получаю Promise<AsyncIterableIterator<T>> и мне нужна равнина AsyncIterableIterator<T> как я могу развернуть AsyncIterableIterator<T> из-под обещания?

1 ответ

Да, это на самом деле довольно просто. Мы хотим реализовать AsyncIterableIterator интерфейс себя, и для каждого звонка next мы сначала разворачиваем Promise,

function unwrapAsyncIterableIteratorPromise (input) {
  return {
    next (value) {
      return input.then((iterator) => iterator.next(value))
    },
    [Symbol.asyncIterator] () {
      return this
    }
  }
}

Это также на npm вместе с TypeScript:

https://www.npmjs.com/package/unwrap-async-iterable-iterator-promise

Другие вопросы по тегам