繁体   English   中英

是否可以直接通过AJAX创建和使用Deferred对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM