我有 HTTP 服务返回对 inspection2update.DamageTypeId
属性的 promise 并继续进一步执行。
HTTP 服务:
function post(objectTypeId, damageDescription) {
var defer = $q.defer();
$http.post(serviceAddress + "save/" + objectTypeId + "/" + damageDescription).then(function (response) {
defer.resolve(response.data);
});
return defer.promise;
}
这里是我在 Controller 中调用服务的方式:
inspection2update.DamageTypeId = damageTypesService.save(inspection2update.ObjectTypeId, self.dType);
但我需要等到我从服务中获取数据,然后才能进一步执行。
为此,我在 $http 解析器中使用了 $q
服务,但我仍然从我的服务中得到了 promise ,但没有数据。
我必须在我的代码中更改什么才能让服务等待数据?
最佳答案
您正在返回一个在 http
调用完成获取数据后解析的 promise 。使用此服务的消费者需要等待 promise 解析,然后然后
对数据做一些事情。
使用then
语法接收promise数据并进一步执行:
damageTypesService.save(inspection2update.ObjectTypeId, self.dType).then(function(data) {
inspection2update.DamageTypeId = data;
// rest of execution...
});
P.S - 据我所知,在你的情况下没有使用 $q
(除非你想与数据混合/制作日志等......)。您可以按原样返回 $http
调用:
function save(objectTypeId, damageDescription) {
return $http.post(serviceAddress + "save/" + objectTypeId + "/" + damageDescription);
}
关于angularjs http服务等待数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38846613/