Tuesday, May 14, 2024
37
rated 0 times [  43] [ 6]  / answers: 1 / hits: 24908  / 10 Years ago, sun, january 11, 2015, 12:00:00

I am looking for a way to create deferred object which will be resolved outside the current scope. I like deferred objects and as I see Promise.defer() in Chrome 38 returns the deferred object.



But in latest Firefox 34 Promise.defer is undefined as well in Safari 8.0.



So I can't use Promise.defer everywhere now. What about future status? Will it be implemented in other browsers or will be removed as deprecated?


More From » cross-browser

 Answers
9

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).


[#68243] Friday, January 9, 2015, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
aleenamarinr

Total Points: 610
Total Questions: 109
Total Answers: 118

Location: Mayotte
Member since Mon, Sep 12, 2022
2 Years ago
;