我必须做2个AJAX调用。第二个取决于第一个呼叫结果。现在我这样做:
BACKUP DATABASE MyDatabase TO disk = 'G:\Backup\MyDatabase.bak' WITH DIFFERENTIAL
服务:
Service.getA(car).then(function(carInfo) {
if (carInfo.success) {
Service.getB(carInfo.number).then(function(holderInfo) {
console.log(holderInfo);
});
}
});
getA: function(car) {
return Server.execute({
method: 'GET',
url: 'a/a',
params: {
car: car
},
}).then(function (carInfo) {
return carInfo;
});
},
方法类似 - 只是另一个URL和另一个参数。我正在学习角度,并希望使用promises和defers实现此代码(谷歌建议代码将更beautoful)。我怎么能这样做?
答案 0 :(得分:3)
你完成它的方式通常是如何链接ajax调用,虽然你可以简化这一点:
Service.getA(car).then(function(carInfo) {
Service.getB(carInfo.number).then(function(holderInfo) {
console.log(holderInfo);
});
});
对于错误,您的服务器返回错误请求400,然后您可以链接.error()回调,而不是根据success
属性确定成功。
正如Cerbrus指出的,$q.all([promise1, promise2])
并行执行它们而不是另一个。
你的getA方法应该像这样返回promise:
getA: function(car) {
return Server.execute({
method: 'GET',
url: 'a/a',
params: {
car: car
},
});
}
如果你真的需要从服务中绑定额外的回调,你可以这样做:
getA: function(car) {
return Server.execute({
method: 'GET',
url: 'a/a',
params: {
car: car
},
}).then(function (carInfo) {
//do something?
}, function () {
//handle error?
});
},
答案 1 :(得分:0)
正如您所说,除了网址之外,两者都是相似的,参数I&#dd;
request : function(url, params) {
return Server.execute({
method: 'GET',
url: url,
params: params,
});
},
称之为
Service.request('a/a', param).then(function(carInfo) {
if (carInfo.success) {
Service.request('b/b', carInfo.number).then(function(holderInfo) {
console.log(holderInfo);
});
}
});