在 AngularJS 中链接服务调用的正确方法是什么?
What is the right way to chain calls to services in AngularJS?
我需要调用一个 Restful 服务端点来获取 ID,一旦我得到结果,我应该通过 angularjs 服务调用第二个 Restful 服务端点。
首先调用 returns 客户 ID,我需要使用此客户 ID 搜索有关该客户的其他信息。
正如我应该调用和等待 promise 一样,我认为嵌套调用 promise 不是一个好习惯。我的意思是像下面的代码这样的东西不应该是一个巧妙的解决方案。我是对还是错?完成这个任务应该有什么好的方法。
someService.someAction().then( function(data){
var id = data.data;
antoherCallToAnotherService.someOtherAction(id).then(function(data2){
//do some stuff
);
);
谢谢
这是非常典型的方法。但是,您可以通过链接多个承诺来优化它:
someService.someAction().then(function(response) {
var id = response.data;
return antoherCallToAnotherService.someOtherAction(id);
})
.then(function(data2) {
// data is available
});
这一点也不差,但如果您愿意,还可以进一步改进。您可能不应该使用整个 response
对象进行第一个承诺解析,底层服务应该使用实际(可能是处理过的数据)进行解析。那么你的代码可能会变成:
someService.someAction()
.then(antoherCallToAnotherService.someOtherAction)
.then(function(data) {
// data is available
});
要使上述工作正常,someService.someAction
应该用 response.data
解析(在您的情况下是 id
)。
我需要调用一个 Restful 服务端点来获取 ID,一旦我得到结果,我应该通过 angularjs 服务调用第二个 Restful 服务端点。 首先调用 returns 客户 ID,我需要使用此客户 ID 搜索有关该客户的其他信息。
正如我应该调用和等待 promise 一样,我认为嵌套调用 promise 不是一个好习惯。我的意思是像下面的代码这样的东西不应该是一个巧妙的解决方案。我是对还是错?完成这个任务应该有什么好的方法。
someService.someAction().then( function(data){
var id = data.data;
antoherCallToAnotherService.someOtherAction(id).then(function(data2){
//do some stuff
);
);
谢谢
这是非常典型的方法。但是,您可以通过链接多个承诺来优化它:
someService.someAction().then(function(response) {
var id = response.data;
return antoherCallToAnotherService.someOtherAction(id);
})
.then(function(data2) {
// data is available
});
这一点也不差,但如果您愿意,还可以进一步改进。您可能不应该使用整个 response
对象进行第一个承诺解析,底层服务应该使用实际(可能是处理过的数据)进行解析。那么你的代码可能会变成:
someService.someAction()
.then(antoherCallToAnotherService.someOtherAction)
.then(function(data) {
// data is available
});
要使上述工作正常,someService.someAction
应该用 response.data
解析(在您的情况下是 id
)。