【问题标题】:Chaining Angular Promises链接 Angular Promise
【发布时间】:2016-03-08 16:20:29
【问题描述】:

我在 Angular 中链接 Promise 时遇到了一些问题。我想做的是从 API 中获取我的项目对象,然后检查项目所有者是否有任何容器,如果有,则触发另一个 GET 来检索容器。最后分配给scope 的容器应该为空或从API 检索到的对象。

现在,下面的示例立即解析为第二个 then 函数,我收到错误 TypeError: Cannot read property 'owner' of undefined。我做错了什么?

$http.get('/api/projects/' + id).then(function (data) {
  $scope.project = data.project;
  return data.project;
}).then(function (project) {
  var containers = project.owner.containers;
  if (containers.length) {
    return $http.get('/api/containers/' + containers[0]);
  } else {
    return null
  }
}).then(function (container) {
  $scope.container = container;
});

【问题讨论】:

    标签: angularjs promise angular-promise


    【解决方案1】:

    啊,原来传入then的数据在一个字段中,所以我需要这样做

    $scope.project = data.data.project;
    return data.data.project;
    

    【讨论】:

      【解决方案2】:

      您的示例代码有效,但如果 $http 调用因 404 而失败怎么办?或者您以后想要添加一些额外的业务逻辑?

      一般来说,您希望使用拒绝承诺来处理“负面”情况,以便更好地控制链接流程。

      $http.get('/api/projects/' + id).then(function (data) {
        $scope.project = data.data.project;
        return data.data.project;
      }).then(function (project) {
        var containers = project.owner.containers;
        if (containers.length) {
          return $q.reject('containers empty');
        }
        return $http.get('/api/containers/' + containers[0]);
      }).then(function (container) {
        $scope.container = container;
      }).except(function (response) {
        console.log(response); // 'containers empty' or $http response object
        $scope.container = null;
      });
      

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-19
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多