0

我在 Angular 中链接承诺时遇到了一些麻烦。我想要做的是从 API 中获取我的项目对象,然后检查项目所有者是否有任何容器,如果有,则触发另一个GET来检索容器。最后,分配给的容器scope应该为 null 或从 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;
});
4

2 回答 2

0

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

$scope.project = data.data.project;
return data.data.project;
于 2014-07-11T00:27:19.790 回答
0

您的示例代码有效,但如果 $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;
});
于 2016-03-08T08:20:29.177 回答