次のコードを機能させようとしていますが、$。Deferredがどのように機能するかを明らかに誤解しています。誰か助けてください。
アイデアは、GetParametersを呼び出して結果を処理し、GetStatsを呼び出して結果を処理することです。また、ビジーを前にtrueに設定し、後にfalseに設定します。.fail()に伝播するエラーは1つだけだと思います。
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に至るまで何も起こりません。