我有一项服务(当一切都说完了)更新数据库上的值。
我想根据结果(成功/失败)更新 View 范围,但当然服务使用的http请求是异步的,因此返回值不会立即可用,并且在 Controller 中未定义。
如果我在 Controller 内发出http请求,我会更新回调函数内的范围,但因为我使用服务,所以范围的嗯...范围(?)对其不可用。
我认为 Promise 是我需要返回的,但也许有更简单的东西。
服务
.service('doStuff',function($http){
this.update = function(data) {
$http.post('http://api.internet', data).then(function(res){
return(res.data.result);
});
}
})
Controller
/* service is injected into controller etc. */
var result = doStuff.update(data);
p(result); // undefined (as expected)
我想既然我从http回调返回,它会在返回之前等待结果可用,但我猜我错过了一些东西。
最佳答案
由于 $http
始终是异步的,因此您无法在回调函数中返回任何内容。就等于什么都不归还。
您需要做的是返回 $http
Promise,然后在 Controller 中处理回调函数。
服务:
.service('doStuff', function($http) {
this.update = function(data) {
return $http.post('http://api.internet', data);
}
})
Controller :
doStuff.update(data).then(function(result){
p(result);
});
关于javascript - Angular 服务的返回 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41668352/