我试图让下面的代码工作,但我显然误解了 $.Deferred 的工作原理。请有人帮忙。
思路是,调用GetParameters,处理结果,调用GetStats,处理结果。还将busy 设置为true before 和false 设置为after。我预计只有一个错误会传播到 .fail()。
self.refreshParams = $.ajax({
url: self.ToAddress() + "/GetParameters",
data: "{}",
type: "GET",
contentType: "application/javascript",
dataType: "jsonp"
});
self.refreshMachines = $.ajax({
url: self.ToAddress() + "/GetStats",
data: "{}",
type: "GET",
contentType: "application/javascript",
dataType: "jsonp"
});
self.refresh = function () {
var d = $.Deferred();
d.pipe(self.refreshParams)
.done(function (p) {
self.params(p);
});
d.pipe(self.refreshMachines)
.done(function (m) {
self.machines(m);
});
d.always(function() {
self.busy(false);
})
.fail(function (x, e) {
self.errorText(x);
});
d.resolve();
}
更新:
我已将其更改为:
self.refreshParams = function() {
return $.ajax({
url: self.ToAddress() + "/GetParameters",
data: "{}",
type: "GET",
contentType: "application/javascript",
dataType: "jsonp"
});
};
self.refreshMachines = function() {
return $.ajax({
url: self.ToAddress() + "/GetStats",
data: "{}",
type: "GET",
contentType: "application/javascript",
dataType: "jsonp"
});
};
self.refresh = function () {
$.when(self.refreshParams(), self.refreshMachines())
.done(function (p, m) {
self.params(p[0]);
self.machines(m[0]);
})
.done(function() {
self.busy(false);
})
.fail(function (x, e) {
self.errorText(x);
});
}
如果服务启动,这似乎可以工作,但如果出现错误,没有什么可以归结为 .fail?