- From: Mark S. Miller <erights@google.com>
- Date: Mon, 2 Sep 2013 20:42:29 -0700
- To: David Bruant <bruant.d@gmail.com>
- Cc: "public-script-coord@w3.org" <public-script-coord@w3.org>
- Message-ID: <CABHxS9gjAX6rEbiaeUr7F6vXPnpLwqfLMsnW5C=+L8x27gEB9g@mail.gmail.com>
Bad idea for non-idempotent imperative operations, including appendChild. The problem is that code such as node.appendChild(x); node.appendChild(y); where node is known to be a genuine dom node, can be assumed to either fail, or to append these children in order. However, with your suggestion, if x is a promise, these children might both be appended but in reverse order. Given Q = Promise.cast; when you don't know whether xP is a promise and you don't care about the order, Q(xP).then(x => node.appendChild(x)) says what you mean rather explicitly. Depending on taste, you might instead Q(xP).then(node.appendChild.bind(node)) I prefer the first form. On Mon, Sep 2, 2013 at 10:56 AM, David Bruant <bruant.d@gmail.com> wrote: > Hi, > > I apologize in advance if this has been discussed already, I'm a bit > behind regarding promise discussions. > > As far as I know, currently, standard functions that expect an object of a > given type will throw when passed a promise. However, wouldn't it be > elegant to do: > > var dataP = getData(url1); // http GET > var templateP = getTemplate(url2); // http GET > var nodeP = Promise.every(templateP, dataP).then(compileTemplate); > document.body.appendChild(**nodeP); > > What this would take is to add a preambule to every WebIDL operations, > something like: > If at least one of the argument is a promise, then, execute the > following: > var argsP = Promise.every(...args); > return argsP.then(operation); > (so, the document.body.appendChild call above actually returns an unused > promise) > > I sort-of like how generic this idea is. But, I have to ask: > 1) how much of the web would this break? > 2) how awful will performance of DOM/browser methods become? (more > precisely, do implementors feel this is something they'll be able to > optimize for easily?) > 3) Does it make sense to apply the same thing for ECMAScript functions? I > feel it could make sense for Date.setMonth, but maybe not for > Array.prototype.push. > > Nothing comes to mind for 1). And I'll let the relevant people answer 2) > as I don't feel qualified. I'm not entirely clear for 3) > > David > > -- Cheers, --MarkM
Received on Tuesday, 3 September 2013 03:42:56 UTC