W3C home > Mailing lists > Public > public-script-coord@w3.org > July to September 2013

Re: document.body.appendChild(promiseForNode)

From: Mark S. Miller <erights@google.com>
Date: Mon, 2 Sep 2013 20:42:29 -0700
Message-ID: <CABHxS9gjAX6rEbiaeUr7F6vXPnpLwqfLMsnW5C=+L8x27gEB9g@mail.gmail.com>
To: David Bruant <bruant.d@gmail.com>
Cc: "public-script-coord@w3.org" <public-script-coord@w3.org>
Bad idea for non-idempotent imperative operations, including appendChild.
The problem is that code such as


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


    Q = Promise.cast;

when you don't know whether xP is a promise and you don't care about the

    Q(xP).then(x => node.appendChild(x))

says what you mean rather explicitly. Depending on taste, you might instead


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

Received on Tuesday, 3 September 2013 03:42:56 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 21:37:50 UTC