- From: Joshua Bell <notifications@github.com>
- Date: Wed, 22 Aug 2018 11:08:41 -0700
- To: heycam/webidl <webidl@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <heycam/webidl/issues/580/415126284@github.com>
Restating:
* @jakearchibald is proposing an analog for `iterable<T>` where the interface itself is an iterable
* @mkruisselbrink is interested in an analog for methods that return `sequence<T>` which is iterable
In the OP, `async_iterable<T>` is like `iterable<T>` but only (so far) defines the `[@@asyncIterable]()` method, so you get:
```js
let sum = 0;
for await (const i of slowCounter) { sum += i; }
```
Whereas @mkruisselbrink is after:
```js
let sum = 0;
for await (const i of someObject.getSlowCounter()) { sum += i; }
```
(Aside: for sync `iterable<T>` we provide `[@@iterator]()` as the bare minimum, as well as `entries()`, `values()`, `keys()` and `forEach()`, following the common methods on Array/Map/Set. So far as I know, we haven't evolved such a pattern for async iterables in the platform.)
With the OP proposal, you'd need to write:
```webidl
interface Whatever {
WhateverSomethingAsyncIterator getSomethings();
}
interface WhateverSomethingAsyncIterator {
async_iterable<Something>;
}
```
Which, if you're thinking of this as an async replacement for `sequence<T> getSomethings()` is fairly verbose.
Both use cases seem legitimate. I guess I would assume `async_iterable<T>` would behave per the OP, and we'd want something like `async_sequence<T>` for the second use case?
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/heycam/webidl/issues/580#issuecomment-415126284
Received on Wednesday, 22 August 2018 18:09:04 UTC