There isn't currently a means to trivially convert them, but sync iterables can still be used in `for await`. They're implicitly wrapped into an async iterable\*, and then used that way.
\* That's supposed to be a spec implementation detail, but was accidentally exposed at one point. I recall reading about it somewhere, but I can't easily find it. On Sun, Aug 19, 2018 at 14:38 Herbert Vojčík <[email protected]> wrote: > Hello! > > > Lately, I created this in one project: > > export async function* zip (...iterables) { > for (const iterators = iterables.map(each => (each[Symbol.iterator] > || each[Symbol.asyncIterator]).apply(each)); ;) { > const all = await Promise.all(iterators.map(async each => await > each.next())); > if (all.some(each => each.done)) break; > yield all.map(each => each.value); > } > } > > It was sync generator before, but once one of the entries became async > generator, I changed the zip itself to be async. > > My question is to the pretty ugly > > const iterators = iterables.map(each => (each[Symbol.iterator] || > each[Symbol.asyncIterator]).apply(each)) > > Is there some more idiomatic way to find "any iterator; sync or async" / > alternatively, could sync iterator return respective [[asyncIterator]] > as well, just promisifying the result (as a sort of proto-proposal of > sort)? > > Or is there some easy way to change sync iterable to async iterable, so > I could change the other ones at call site? > > > Thanks, Herby > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss >
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

