【发布时间】:2017-03-17 03:09:17
【问题描述】:
我需要连续发出 3 个请求。所以为此我使用 jquery defered。
Request 1
-> on done if response contains expected result then Request 2 else return empty array/null
-> on done if response contains expected result then Request 3 else return empty array/null
private request1() {
const vm = this;
vm.isLoading(true);
let deffer = system.defer(dfd => {dataService.getResponse1()
.done((response) => {
request2(response.collection))
dfd.resolve();
});
return deffer.promise();
}
private request2(collection) {
dataService.getResponse2(collection)
.done((response) => request3(response.collection));
}
private request3(collection) {
dataService.getResponse3(collection)
.done((response) => saveResponse(response.collection));
}
private saveResponse(collection) {
//do some stuff
}
在构造函数中我调用request1 像
vm.request1().done(() => {
vm.isLoading(false);
});
问题是isLoading 在调用saveResponse 之前被设置为false。在所有请求完成后,我应该如何正确重构我的请求结构以更新 isLoading?
谢谢。
【问题讨论】:
-
我想你想在 request3 的 done 处理程序中调用 dfd.resolve() 。一种方法是将 dfd 传递给 request2,然后再传递给 request3。在你现在有电话的地方,承诺在 request2 开始时解决。
标签: javascript jquery typescript jquery-deferred chaining