我有一个要求,我需要在Angular 1中创建一个服务,并使用可以在控制器中访问的API调用加载数据。之前,我尝试通过$ http服务进行API调用,然后将数据分配给变量/对象。然后,我注入了服务,并将变量/对象分配给了控制器作用域变量/对象。
我在控制器事件循环中观察到的与服务事件循环不同,并且控制器作用域变量/对象仍未定义。后来我得到了一个解决方案,可以通过从服务中返回一个承诺,然后在控制器中调用该承诺来工作,但是我对承诺不陌生,并且当我调用一个承诺时,我无法完全吸收该承诺,因此我必须将函数传递为我认为这是$ http API调用的回调,但是我不确定它在幕后如何工作。有人可以解释吗?
//service code
this.getuserimages = function(uname) {
console.log("Username in UserImage Service: " + uname);
var promise = $http.get('/api/images/' + uname).then(function(response) {
this.userimages = response.data;
return this.userimages;
});
return promise;
}
// controller code
var userimagespromise = userImageService.getuserimages($routeParams.username);
userimagespromise.then(function(data) {
$scope.userimages = data;
答案 0 :(得分:0)
您的代码是Promise chain。
我重新编写了您的代码,使该 chain 更清晰,但意义完全相同:
$http.get('/api/images/' + uname)
.then(function(response) {
this.userimages = response.data;
return this.userimages;
})
.then(function(images) {
$scope.userimages = images;
});
您可以通过以下方式阅读此流程:
请注意,整个流程是异步的,因为每个Promise都是“ 代表异步操作最终完成或失败的对象”。
您可以在Promise documentation中找到更多信息。