我有多个ajax请求一起工作,并且每个请求都基于先前的请求结果,如果前一个请求返回false,则链应该停止。
这里有一些代码
//here is a promise chain
return this.getBand(id)
.then(this.getAlbum)
.then(this.getSong);
//ajax request for getBand
function getBand(id) {
return Ember.$.ajax({
data:{id: id},
url: urls.bandUrl,
}).then(function(result){
return result;
});
};
//ajax request for getAlbum
function getAlbum(result){
if(result.pass) {
var bandName = result.name;
return Ember.$.ajax({
//...
})
} else {
// i wanna stop the promise chain here, how to do that?
}
}
答案 0 :(得分:1)
您可以通过返回rejected Deferred:
来指明链中的错误function getAlbum(result) {
if (result.pass) {
// ...
} else {
return Ember.$.Deferred().reject('Previous result did not pass');
}
}
您还可以修改getBand()
以检查result.pass
本身,因此getAlbum()
除非确实通过,否则不会被调用。
function getBand(id) {
return Ember.$.ajax({
// ...
}).then(function(result){
return result.pass ?
result :
Ember.$.Deferred().reject('Band could not be found (' + id + ').');
});
};
链条不会完全停止,但它只会继续fail
个回调/过滤器,作为第二个参数提供给.then()
或.fail()
。
return this.getBand(id)
.then(this.getAlbum)
.then(this.getSong)
.fail(function (error) {
// show `error` to user
});