Use ".then(null, Cu.reportError);" with Promise.jsm

Paolo Amadini paolo.02.prg at amadzone.org
Fri Aug 9 09:10:12 UTC 2013


This is a quick reminder to anyone writing or reviewing code that uses
"Promise.jsm".

You should check that exceptions aren't swallowed, and this is typically
done with a logging rejection handler. You should always use the handler
unless you're handing off the promise to other code. For some examples:

https://developer.mozilla.org/Mozilla/JavaScript_code_modules/Promise.jsm/Promise#Handling_errors_and_common_pitfalls

As of now, this amounts to a pattern like:

  myPromise.then(value => {
    // ...
  }).then(null, Components.utils.reportError);

Or when creating a task without returning the promise:

  Task.spawn(function () {
    // yield ...
  }).then(null, Components.utils.reportError);

I admit that having to explicitly provide an error handler at the end
of a promise chain may be considered less than optimal, but for now it
is the recommended way in new code. We're discussing ways to make it
less likely that exceptions are swallowed, in bug 902866:

https://bugzilla.mozilla.org/show_bug.cgi?id=902866

Please reply in the bug if you have anything to add to the discussion.

Cheers,
Paolo



More information about the firefox-dev mailing list