On Wed, Feb 24, 2016 at 11:54 AM, Bergi <[email protected]> wrote: > Bradley Meck wrote: > >> I was doing some recursive data structure work and ended up with a >> cyclical >> promise that did not use a direct self reference. It can be reduced down >> to: >> >> ```javascript >> var af, a = new Promise(f=>af=f); >> var bf, b = new Promise(f=>bf=f); >> >> af(b);bf(a); // the problem >> >> a.then(_=>_) // some env/libs need this to start checking status >> ``` >> >> According to >> https://tc39.github.io/ecma262/#sec-promise-resolve-functions >> it looks like this should cause a recursive and infinite set of >> `EnqueueJob("PromiseJobs",...)` >> > > I fear that's what the standard says, yes. The ES6 spec does too many (and > in some cases, unreasonably many) `then` calls on promises anyway to be > followed by an efficient promise implementation. > > [Promises/A+](https://promisesaplus.com/) in contrast says > > | Implementations are encouraged, but not required, to detect such > | recursion and reject promise with an informative TypeError as the > | reason. >
I think the standard *should* require a deterministic error. E < https://github.com/kpreid/e-on-java/blob/master/src/jsrc/org/erights/e/elib/ref/ViciousCycleException.java>, Q, and my own Q-like system < https://github.com/tvcutsem/es-lab/blob/master/src/ses/makeQ.js#L700> all do. Within an engine, this technique should be straightforward to implement without slowing down the non-cyclic case. > Regards, > Bergi > > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss > -- Cheers, --MarkM
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

