我正在使用延迟,因为我需要异步执行多个进程。
为了更清楚,这是我治疗的意义:
- 处理1:调用提供用户权限的ajax服务
- Treatment2 :调用提供链接和标签的 ajax 服务。
我需要同时调用这 2 个服务,然后得到这两个服务的统一响应,以便根据权限显示链接(我真正的问题是使用第 3 个 ajax 服务,但我们只讨论 2 个以简化)。
首先,我将 deferred 声明为 global var :
var treatment1 = $.Deferred();
var treatment2 = $.Deferred();
然后,当我需要完成这项工作时,我使用所需的数据调用 resolve 方法,以便在全局唯一处理中使用它:
- 当我的第一个 ajax 服务响应时:
treatment1.resolve(responseData1)
- 当我的第二个 ajax 服务响应时:
treatment2.resolve(responseData2)
当处理 1 和 2 完成时,触发 done 事件:
$.when(treatment1, treatment2).done(function(responseData1,responseData2) {
DoGlobalTreatmentWithAllResponseData(responseData1,responseData2)
}
我的问题是 deferred 只能工作一次。
由于我的网站主要是用 ajax 实现的,所以我需要多次触发该事件。
用户可以单击按钮来搜索用户。然后显示用户列表,并异步调用 ajax 服务。这个操作可以无限重复。
我只需要一种方法来重用延迟但多次的原则。我知道这个问题已经讨论过了,每个人都说 deferred 不能这样工作。
但是,真的不可能重置延迟状态或重置承诺(即使通过实现自定义解决方案,使用 AOP 或其他方式)?
如果不可能,我可以使用什么解决方案?我不想一个接一个地触发治疗,但我真的想在所有治疗完成后(也就是说,在活动中的最后一次治疗结束后)做一个全局治疗,并且我想使用responseData
每个服务的.
这是我想自定义的示例代码:http: //jsfiddle.net/PLce6/14/
我希望清楚,因为英语不是我的母语。
预先感谢您的帮助。