javascript Promise.defer() 浏览器支持
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27889687/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Promise.defer() browser support
提问by just-boris
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.
我正在寻找一种创建延迟对象的方法,该对象将在当前范围之外解析。我喜欢延迟对象,正如我Promise.defer()
在 Chrome 38 中看到的那样返回延迟对象。
But in latest Firefox 34 Promise.defer
is undefined as well in Safari 8.0.
但是在最新的 Firefox 34Promise.defer
中,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?
所以我Promise.defer
现在不能到处使用。未来地位如何?它会在其他浏览器中实现还是会因弃用而被删除?
回答by Alexander O'Mara
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.
根据关于 Deferred 的 MDN 文章,该.defer
方法已过时。如果你查看这个 bug issue,它说这Promise.defer
是非标准的,所以它不太可能返回。
Starting from Gecko 30, this object is obsolete and should not be used anymore. Use the
new Promise()
constructor instead.
从 Gecko 30 开始,此对象已过时,不应再使用。改用
new Promise()
构造函数。
They offer an example of how to rewrite Promise.defer
code, to instead use new Promise
.
他们提供了一个如何重写Promise.defer
代码的示例,而是使用new Promise
.
Promise.defer
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).
新格式有几个优点,包括更干净的代码和改进的 throw 安全性(如果 promise init 函数中的代码同步抛出,promise 将拒绝)。
回答by dfsq
Although I doubt this is a good idea, but technically you can implement custom deferred object based on Promises. For example:
虽然我怀疑这是一个好主意,但从技术上讲,您可以基于 Promise 实现自定义延迟对象。例如:
function defer() {
var deferred = {};
var promise = new Promise(function(resolve, reject) {
deferred.resolve = resolve;
deferred.reject = reject;
});
deferred.promise = promise;
return deferred;
}
var deferred = defer();
deferred.promise.then(function(data) {
document.body.innerHTML += '<p>Resolved: ' + data + '</p>';
});
document.body.innerHTML = '<p>Deferred created.</p>';
setTimeout(function() {
deferred.resolve(123);
}, 2000);