How come resolving a settled Promise doesn't throw?
Tab Atkins Jr.
jackalmage at gmail.com
Tue Feb 28 18:19:59 UTC 2017
On Tue, Feb 28, 2017 at 10:12 AM, /#!/JoePea <joe at trusktr.io> wrote:
> f.e.
>
> ```js
> let resolve
> let p = new Promise(r => resolve = r)
>
> resolve(5) // resolves the promise.
> resolve(4) // noop (in Chrome), but why not throw an error?
> ```
>
> I only tested in Chrome, and I'm assuming it follows spec, but I could be
> wrong.
>
> I'm asking because it seems that throwing an error will prevent shots in the
> foot, so that code doesn't assume that resolving on an already resolved
> Promise worked, although it didn't. It seems like it can lead to unexpected
> failures.
That's correct behavior, yes. In general, it's because the internal
state of a promise is meant to be unobservable unless you're
specifically listening to it.
~TJ
More information about the es-discuss
mailing list