This is actually up for clarification in the upcoming 1.1 version of the spec. 
The important invariant is that the function execution stack be empty of user 
code at the time `onFulfilled` and `onRejected` are called. The current 
phrasing does not suffice for this, as pointed out in

https://github.com/promises-aplus/promises-spec/issues/100

The current phrasing is just an (insufficient) means of working around the fact 
that JS doesn't specify an event loop; an attempt at being clever.

Discussion is ongoing at 
https://github.com/promises-aplus/promises-spec/pull/104

We seem to be converging around something more like the invariant I spoke of 
above, as prompted by Mark Miller; e.g. "`onFulfilled` or `onRejected` must not 
be called when the stack contains any user code." But this requires defining 
user code, which is tricky---it includes `[native code]`, but also base code 
from the platform (e.g. Node.js's built-in modules), and parts of the promise 
implementation itself (e.g. the internal trampolines used by Q and when among 
others, or the setImmediate polyfill many fall back on).
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to