Javascript AngularJS:promises,你能在使用.then()后将承诺传递回去吗?
我还是一个新的角度和承诺,所以我希望我有正确的想法在这里 我目前有一个数据层服务,它使用restanglar获取一些数据,然后返回一个承诺,如下所示Javascript AngularJS:promises,你能在使用.then()后将承诺传递回去吗?,javascript,angularjs,promise,restangular,angular-promise,Javascript,Angularjs,Promise,Restangular,Angular Promise,我还是一个新的角度和承诺,所以我希望我有正确的想法在这里 我目前有一个数据层服务,它使用restanglar获取一些数据,然后返回一个承诺,如下所示 dataStore.getUsers = function (params) { return users.getList(params); }; $dataStore.getUsers(params).then(function (response) { $scope.users = response; }, function(
dataStore.getUsers = function (params) {
return users.getList(params);
};
$dataStore.getUsers(params).then(function (response) {
$scope.users = response;
}, function(response) {
$log.error("Get users returned an error: ", response);
});
然后,我的控制器调用了这个函数,收到了一个回复,就像这样
dataStore.getUsers = function (params) {
return users.getList(params);
};
$dataStore.getUsers(params).then(function (response) {
$scope.users = response;
}, function(response) {
$log.error("Get users returned an error: ", response);
});
这很好,但我希望在传回之前在数据存储中使用promise。我想使用.then()方法检查它是否失败,并做一些日志记录,然后,从suces函数和failure函数中,我想将原始承诺返回给我的控制器
然后,我的控制器就可以像现在一样使用.then()方法了,事实上,我根本不想更改控制器代码,只想更改数据存储代码
这里有一些半伪代码来说明我希望我的数据存储函数做什么
dataStore.getUsers = function (params) {
users.getList(params).then(function (response) {
$log("server responded")
return original promise;
}, function(response) {
$log.error("server did not respond");
return original promise;
});
};
实际上,在伪代码中,您一点也不遥远。承诺链:
dataStore.getUsers = function (params) {
return users.getList(params).then(function (response) {
$log("server responded")
return response;
}, function(failure) {
$log.error("server did not respond");
// change to throw if you want Angular lever logs
return $q.reject(failure);
});
};
控制器现在使用相同的值进行解析/拒绝。日志需要点击promise,因此必须添加。然后添加处理程序来处理它。其他promise库对此有方便的方法,但$q在这方面是最低限度的
或者,您可以使用更好的catch语法,并将错误传播到日志中:
dataStore.getUsers = function (params) {
return users.getList(params).then(function (response) {
$log("server responded")
return response;
}).catch(function(failure) {
$log.error("server did not respond");
throw failure;
});
};
如果必须返回原始承诺,那么还可以执行var p=users.getList(…);p、 然后(…日志代码…);返回p
,但没有好的理由选择它。在之前缺少一个括号。catch
@thefourye这正是编辑的目的:p请随意编辑我的代码,以便下次修复此类问题:)实际上,如果您在5分钟内编辑,那么不必维护编辑历史:)谢谢Benjamin,这正是我想要的。我缺少的一点是你可以把整件东西还给我。我将使用第二个版本,尽管我不知道角度捕捉的作用。我相信稍后会明白为什么这是个好主意:)