我目前正在接受一些承诺的大脑融合。
给出以下代码:
$scope.getData = function(user) {
return $http.post('/endpoint', "some post data", { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } })
.success(function (response) {
var myThing = { stuff: response.infoData };
localStorageService.set('myData', { stuff: response.infoData });
return myThing;
});
};
是否从成功回调中返回 myThing 对象:
据我所知:
这是对的吗?是否有我遗漏的东西,在成功方法中返回对象有什么好处,还是返回多余的? (我很清楚这是代码可以改进,但我试图找出具体为什么有人写这个,或者如果它完全是一个错误)
答案 0 :(得分:4)
通过success/error
方法使用$http
回调无法让您从中返回数据。承诺确实提供了这种能力。它目前的写作方式将会如实。像myThing
一样,当前的实现不会返回(那里是多余的return语句)。
为什么有人会写这个,或者这完全是个错误?
实施此方法的人试图从中返回数据,但我不认为他是通过查看当前代码而成功的。
利用$http
方法返回的承诺,这将使您能够通过异步调用形成承诺链。为此,您需要使用.then
代替.success
方法。
$scope.getData = function(user) {
return $http.post('/endpoint', "some post data", { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } })
.then(function (res) {
var response = res.data;
var myThing = { stuff: response.infoData };
localStorageService.set('myData', { stuff: response.infoData });
return myThing;
});
};
如果你真的有兴趣通过调用getData
方法来检索数据,那么你可以使用getData
方法,你应该将.then
函数放在它返回的promise上以链接它。
$scope.getData().then(function(thing){
console.log(thing);
})
旁注
.success
&error
功能超过$http
methods are deprecated。