![](/img/trans.png)
[英]Is it possible to use a Deferred object in order to create a callback after a for loop has completed?
[英]Is it possible to create and use a Deferred object directly with AJAX?
我有一个应用程序,当用户单击特定按钮时,该应用程序会发送一些AJAX请求。
但是,我还有一个类似于“取消”按钮的东西,该按钮应该中止所有请求。
我正在使用$.when
当前处理所有发送的请求,并在返回的Promise
对象上添加了适当的回调。
但是, $.when
返回Promise
对象的事实令人沮丧,因为它没有(故意)包括Deferred
必须控制请求的方法,如以下代码所示:
使用$ .when
var x = $.when($.get('/'), $.get('/')); // .then(function() {console.log('done');});
Object.keys(x);
// ["state", "always", "then", "promise", "pipe", "done", "fail", "progress"]
使用一个AJAX请求(jqXHR实现Deferred接口)
var x = $.get('/');
Object.keys(x);
// ["readyState", "getResponseHeader", "getAllResponseHeaders", "setRequestHeader", "overrideMimeType", "statusCode", "abort", "state", "always", "then", "promise", "pipe", "done", "fail", "progress", "complete", "success", "error"]
我正在寻找一种检索Deferred
对象的方法,或将$.when
替换$.when
执行相同功能但返回Deferred
对象的方法。 从那里,我将能够调用合适的拒绝/中止方法。
这可能吗?
您可以将请求放入数组中,并在需要时单独中止它们。
为此,您可以在$.when
.apply
上使用.apply
。 例如:
var requests = [$.get('/'), $.get('/')];
$.when.apply($,requests).then(function(res1,res2){
//access results here
});
// aborting:
requests.forEach(function(x){ return x.abort();});
延迟的对象仅用于通过回调API创建承诺。 您不能“检索”已存在的promise的延迟对象。 仅使用它创建新的。
您可能还想研究Domenic的last()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.