【问题标题】:Does promise object always need callback function?承诺对象总是需要回调函数吗?
【发布时间】:2019-08-11 17:15:49
【问题描述】:

我有一个要求,我需要在 Angular 1 中创建一个服务,并使用可以在控制器中访问的 API 调用加载数据。我之前尝试过使用 $http 服务进行 API 调用并将数据分配给变量/对象。然后我注入服务并将变量/对象分配给控制器范围变量/对象。

我在控制器事件循环中观察到的与服务事件循环不同,并且控制器范围变量/对象仍未定义。后来我通过从服务返回一个promise,并在控制器中调用promise,得到了一个解决方案,但是我是promise的新手,当我调用promise时无法完全吸收,我必须将函数传递为我认为这是 $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;

【问题讨论】:

    标签: promise


    【解决方案1】:

    您的代码是Promise 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 函数),将它们保存在变量中并返回给链的下一个元素
    • 然后,我们将它们可用(=> 从先前的承诺返回),将它们设置在 $scope

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 1970-01-01
      • 2020-09-10
      • 2014-04-23
      • 2014-04-27
      相关资源
      最近更新 更多