<div dir="ltr">Yes, you need to intervene and reject the latest promise upon timeout (by having a reference to its "reject" callback).<div><br></div><div>This makes me wonder (and I'd like to be corrected if wrong) if async iterators are more of a hindrance than a help?</div><div><br></div><div>We can currently do a loop over an array of promises, without async iterators:</div><div><br></div><div>```javascript</div><div>async requestLoopAsync(){</div><div>    for(const requestItemPromise of requestItemPromises){</div><div>        //We can intervene here BEFORE we await the promise, unlike</div><div>        //with async iterators e.g. requestItemPromise.myRejectCallbackReference()</div><div><br></div><div>        const response = await requestItemPromise; //etc.</div><div>    }</div><div>}</div><div>```</div><div><br></div><div>Am I right or wrong?</div><div><br></div><div>(For the timeout example, we could do `currentRequestItemPromise = requestItemPromise` then on timeout do `currentRequestItemPromise.myRejectCallbackReference()` (where `myRejectCallbackReference` was assigned when we created the promise e.g. `this.myRejectCallbackReference = reject` from the `reject` parameter in `(resolve, reject)=>`)</div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, 31 Jul 2017 at 10:40 kai zhu <<a href="mailto:kaizhu256@gmail.com">kaizhu256@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">the timeout handler will not work as advertised, e.g. what if io / db issues causes a network stream to intermittently respond in intervals far greater than 30000ms or not at all?<br>
<br>
> On Jul 31, 2017, at 7:26 AM, James Browning <<a href="mailto:thejamesernator@gmail.com" target="_blank">thejamesernator@gmail.com</a>> wrote:<br>
><br>
> It'll look something like this:<br>
><br>
> ```javascript<br>
><br>
> async function consumeReadableStream(stream) {<br>
>     const start = Date.now()<br>
>     for await (const chunk of stream) {<br>
><br>
>        /* Do whatever you want with the chunk here e,g, await other<br>
> async tasks with chunks<br>
>            send them off to wherever, etc<br>
>        */<br>
><br>
>         if (Date.now() - start > 30000) {<br>
>             throw new Error('30000 ms timeout')<br>
>        }<br>
>    }<br>
>    /* Instead of callbackOnce the returned promise from this function<br>
> itself can be used */<br>
> }<br>
><br>
> ```<br>
> _______________________________________________<br>
> es-discuss mailing list<br>
> <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
> <a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>