If you use for-await syntax, the js implementation will internally use
GetIterator[1] which will look for Symbol.asyncIterator and if it can't find it
it will return an async wrapper around Symbol.iterator -Gus [1]:
https://tc39.github.io/ecma262/#sec-getiterator ---- On Sun, 19 Aug 2018
16:34:27 -0500 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