链接角度承诺

时间:2014-07-11 00:17:17

标签: angularjs promise angular-promise

我在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;
});

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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;
});