According to the MDN article on Deferred, the .defer
method is obsolete. If you look at this bug issue, it says that Promise.defer
is non-standard, so it's not likely to return.
Starting from Gecko 30, this object is obsolete and should not be used anymore. Use the new Promise()
constructor instead.
They offer an example of how to rewrite Promise.defer
code, to instead use new Promise
.
Promise.defer
var deferred = Promise.defer();
doSomething(function cb(good) {
if (good)
deferred.resolve();
else
deferred.reject();
});
return deferred.promise;
new Promise
return new Promise(function(resolve, reject) {
doSomething(function cb(good) {
if (good)
resolve();
else
reject();
});
});
There are several advantages to the new format, including cleaner code, and improved throw safety (if the code in the promise init function throws synchronously the promise will reject).