jus*_*ris 16 javascript cross-browser promise es6-promise
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.
但最新的Firefox 34 Promise.defer在Safari 8.0中也未定义.
所以我Promise.defer现在无法到处使用.未来地位怎么样?它会在其他浏览器中实现还是会被弃用?
Ale*_*ara 25
根据MDN关于延期的文章,该.defer方法已经过时.如果你看一下这个bug问题,它会说这Promise.defer是非标准的,所以它不太可能返回.
从Gecko 30开始,此对象已过时,不应再使用.请改用
new Promise()构造函数.
他们提供了一个如何重写Promise.defer代码的示例,而不是使用new Promise.
var deferred = Promise.defer();
doSomething(function cb(good) {
if (good)
deferred.resolve();
else
deferred.reject();
});
return deferred.promise;
Run Code Online (Sandbox Code Playgroud)
return new Promise(function(resolve, reject) {
doSomething(function cb(good) {
if (good)
resolve();
else
reject();
});
});
Run Code Online (Sandbox Code Playgroud)
新格式有几个优点,包括更清晰的代码和更高的抛出安全性(如果promise init函数中的代码同步抛出,则promise将拒绝).
dfs*_*fsq 20
虽然我怀疑这是一个好主意,但从技术上讲,你可以实现基于Promises的自定义延迟对象.例如:
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);Run Code Online (Sandbox Code Playgroud)