Sync iterables and [[asyncIterator]]
Isiah Meadows
isiahmeadows at gmail.com
Sun Aug 19 22:58:20 UTC 2018
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 <herby at mailbox.sk> 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
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20180819/650b3737/attachment.html>
More information about the es-discuss
mailing list