我正在使用jQuery Deferred进行一些异步事件处理。或多或少 由于我的代码的理论纯度,我想成为Promise / A +兼容。 (该 更实际的原因是后来我可以更新我的代码以使用本机Promise 所有主流浏览器都支持它们。)
但是,我使用jQuery的特定功能延迟将它区分开来 来自Promise / A +,我不知道如何解决它。因此,我愿意 想知道如何在Promise / A +兼容中解决以下问题 方式。
问题的核心是我已经按顺序需要Promise对象了 在我知道promise的确切执行者之前将处理程序绑定到它, 因为执行者依赖于稍后会知道的一些参数。 使用jQuery延迟这不是问题,因为我可以创建一个"空" 首先推迟,将一些处理程序绑定到它,然后将执行程序附加到它。 使用Promise / A +,必须立即将执行程序作为参数给出 的构造函数,甚至会在之前立即执行 Promise的构造函数返回。
目前我有这样的事情:
// Create "empty" deferred
deferred = jQuery.Deferred();
// Attach one or more handlers
deferred.then(
function onFullfilled( value ) {
// do something
}
);
// Somewhere at some totally different part of code after the particular
// URL has become known
jQuery.ajax( "www.myhost.com/my/url", {
error: function( jqXHR ) {
deferred.reject( jqXHR );
},
success: function( data, status, jqXHR ) {
deferred.resolve( jqXHR );
}
});
使用Promise / A +我必须做这样的事情,但我不能:
// Create promise
promise = new Promise( function( resolve, reject ) {
// Error, ups: I do not know the URL yet
jQuery.ajax( "www.myhost.com/my/url", {
error: function( jqXHR ) {
resolve( jqXHR );
},
success: function( data, status, jqXHR ) {
reject( jqXHR );
}
});
);
// Attach one or more handlers
promise.then(
function onFullfilled( value ) {
// do something
}
);
谢谢!
http://www.html5rocks.com/en/tutorials/es6/promises/