From: Mark S. Miller [[email protected]]
> No. Assuming that p and q are both promises and that q is pending, p is
> resolved to q when either p adopts q or p accepts q. From the .then
> perspective these are the same, so we'd say p follows q or p is resolved to
> q. In neither care would p.then fire until q is settled (fulfilled or
> rejected). However, there's an operational difference between "p adopts q"
> and "p accepts q" at the .flatMap level: p adopts q does not fire p.flapMap.
> p accepts q does fire p.flatMap with q as the acceptance value.
After being confused on this point for a while, I hashed it out with Tab over
IRC (thanks Tab!) and thought I'd share my moment of enlightenment with all
involved.
```js
var foreverPending = new Promise(() => {});
var notAcceptedAndNotResolved = Promise.resolve(foreverPending);
var acceptedButNotResolved = Promise.fulfill(foreverPending);
// Neither of them are fulfilled, so the distinction doesn't matter for `then`
usage.
notAcceptedAndNotResolved.then(() => console.log("this will never happen (never
fulfilled)"));
acceptedButNotResolved.then(() => console.log("this will never happen (never
fulfilled)"));
// But it matters for `flatMap` usage.
notAcceptedAndNotResolved.flatMap(() => console.log("this will never happen
(never accepted)"));
acceptedButNotResolved.flatMap(() => console.log("this *will* happen"));
```
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss