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