On Tue, Jun 9, 2015 at 12:38 PM, Mark S. Miller <erig...@google.com> wrote:
> On Tue, Jun 9, 2015 at 9:29 AM, C. Scott Ananian <ecmascr...@cscott.net> > wrote: > >> Mark: The `prfun` library in fact uses `Promise#timeout(n)` instead of a >> `TimeoutPromise` subclass. But this is really a language-design question. >> You might as well ask why we have `WeakMap()` as a constructor instead of >> using `Map#weak()` or `weakmapify(map)`. The fundamental reason is "so you >> can name (and thus test) the type of the object". >> > > Do you ever test that the object returned by `Promise#timeout(n)` is > something other than a plain promise? > As I said, I use `Promise#timeout` myself in my implementation, not a subclass. So I haven't written tests for TimeoutPromise myself. But the smalltalk community has a number of places where it is worth testing whether an argument is a WeakArray. Those examples would translate directly to tests for WeakPromise. And for TimeoutPromise you could imagine something like: ``` var protect = function(x) { return (x instanceof TimeoutPromise) ? x : TimeoutPromise.resolve(x); }; var doSomethingImportant = function(x) { // ensure that we're not going to hang forever waiting for x return protect(x).catch(....).then(....); }; ``` It is rather convenient that the `protect` function already has a clever name: `TimeoutPromise.resolve`. --scott
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss