- From: Yutaka Hirano <yhirano@chromium.org>
- Date: Tue, 2 Jul 2013 10:19:26 +0900
- To: Domenic Denicola <domenic@domenicdenicola.com>
- Cc: Anne van Kesteren <annevk@annevk.nl>, "www-dom@w3c.org" <www-dom@w3c.org>
- Message-ID: <CABihn6GMtLTXHMcQaW++vX8LiJ-uXTZCRiCo3cGNyy7AxBc8Zw@mail.gmail.com>
Promise/A+ (http://promises-aplus.github.io/promises-spec/#promise_states) states that When in fulfilled, a promise: must not transition to any other state. and it is easy to understand. I don't understand what the corresponding statement is in DOM/promises: 1. A promise must not transition to any other state when it is in fulfilled state. 2. A promise must not transition to any other state when its resolver's resolved flag is set. 3. A promise must not transition to any other state when it is in fulfilled state and its resolver's resolved flag is set. 4. A promise must not transition to any other state when it is in fulfilled state or its resolver's resolved flag is set. I think that is 1, right? If so, can we have the state check in fulfill / reject algorithms? On Sat, Jun 29, 2013 at 1:48 AM, Domenic Denicola < domenic@domenicdenicola.com> wrote: > It's important to distinguish between the fundamental three states, viz. > fulfilled, rejected, and pending, as opposed to the two "fates" unresolved > and resolved. The former impact the behavior of the promise, whereas the > latter impact the relation between promise and resolver. > > As such I don't think your proposed suggestions are the best way to go. > But, I do agree the current spec is fairly confusing in this area and could > be improved. I will try to make time for a pull request over the next week. > ------------------------------ > From: Yutaka Hirano <yhirano@chromium.org> > Sent: 6/28/2013 9:41 > To: Anne van Kesteren <annevk@annevk.nl> > Cc: www-dom@w3c.org > Subject: Re: [promises] resolver's resolved flag check on promise callback > > > What do you mean by 4.4? > Sorry, I meant the entry in resolver's resolve algorithm. > > 4. If calling the [[Call]] internal method threw an exception, catch > it and run context object's reject with the thrown exception and the > synchronous flag if set. > > > I think you're right that this is problematic, but it's not entirely > clear to me this solves it. > I think adding adhoc checks works, but doing the following will solve the > problem more cleanly. > - Remove resolved flag. > - Add "resolving" state. > - fulfill algorithm (not fulfill method) does nothing if the promise's > state is not "pending" nor "resolving". > - resolve algorithm (not resolve method) does nothing if the promise's > state is not "pending". > - reject algorithm (not reject method) does nothing if the promise's > state is not "pending" nor "resolving". > - resolve algorithm sets the promise's state as "resolving". > > On Fri, Jun 28, 2013 at 10:53 PM, Anne van Kesteren <annevk@annevk.nl>wrote: > >> On Thu, Jun 27, 2013 at 2:51 AM, Yutaka Hirano <yhirano@chromium.org> >> wrote: >> > Hi, I am implementing promises and I have a question. >> > In resolve algorithm, we create promise callbacks for the given >> resolver and >> > pass them to a (possibly) user defined function. >> > A user can call them more than once. >> > Since a promise callback for |resolver| and |algorithm| runs >> |resolver|'s >> > |algorithm| and the |algorithm| doesn't checks |resolver|'s resolved >> flag, >> > it seems that the promise can be resolved or rejected multiple times. >> > Is it correct? I think the check for the resolved flag is needed in: >> > - promise callback >> > - 4.4 in resolve algorithm. >> >> What do you mean by 4.4? I think you're right that this is >> problematic, but it's not entirely clear to me this solves it. >> >> >> -- >> http://annevankesteren.nl/ >> > >
Received on Tuesday, 2 July 2013 01:19:53 UTC