Есть ли способ реализовать <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