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

Reply via email to