Promise对象是否总是需要回调函数?

时间:2019-03-20 21:27:37

标签: promise

我有一个要求,我需要在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;

1 个答案:

答案 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;
});

您可以通过以下方式阅读此流程:

  • 请给我获取用户图片
  • 然后 then ,我们将可以使用它们(=>从get返回并传递给 then 函数),将它们保存在变量中,然后将其返回给
  • next 元素
  • 然后然后,我们将可以使用它们(=>从先前的承诺中返回),将它们设置在 $ scope

请注意,整个流程是异步的,因为每个Promise都是“ 代表异步操作最终完成或失败的对象”。

您可以在Promise documentation中找到更多信息。