所以,我有一个 Angular 应用程序可以对服务器进行静态调用。有一项服务可以结束对服务器的调用。我目前在服务上有一个方法,它只是从 $http 服务返回 promise 。我想对该方法调用添加一些额外的处理,但由于 promise 的异步性质,我不确定该怎么做。
目前在 typescript 中:
class BoardService {
private $http;
constructor($rootScope: IRootScope, $http: ng.IHttpService) {
this.$http = $http;
}
fetchBoard(id: number) {
return this.$http.get("/api/board/" + id);
}
}
我想把它变成这样:
fetchBoard2(id: number) {
this.$http.get("/api/board/" + id).success(function(data)
{
// Manipulate the data
});
// return manipulated data;
}
你会怎么做?
最佳答案
整句警告!因为 promise 是异步的,所以任何基于 promise 数据返回数据的东西本身都必须返回一个 promise。您希望 fetchBoard2
返回一个 promise ,一旦 $http
promise 返回并且您已经操作了数据,该 promise 就会得到解决。您可以使用 Angular 的 $q
服务来完成此操作。
fetchBoard2(id: number) {
var deferred = $q.defer();
$http.get("/api/board/" + id).success(function(data) {
var newData = doSomething(data);
deferred.resolve(newData);
});
return deferred.promise;
}
管理额外的延迟对象很快变得繁琐,因此您可以使用 then
将您自己的操作插入到管道中。
fetchBoard3(id: number) {
return $http.get(...).then(function(data) {
return doSomething(data);
});
}
有关更多详细信息,请点击此处 a good article .
关于javascript - Angular 服务 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30533105/