angularjs http服务等待数据
我有一个HTTP服务,它将承诺返回到angularjs http服务等待数据,angularjs,Angularjs,我有一个HTTP服务,它将承诺返回到inspection2update.DamageTypeId属性,并继续执行 HTTP服务: function post(objectTypeId, damageDescription) { var defer = $q.defer(); $http.post(serviceAddress + "save/" + objectTypeId + "/" + damageDescription).then(function (response) {
inspection2update.DamageTypeId
属性,并继续执行
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;
}
以下是我如何在控制器中调用服务:
inspection2update.DamageTypeId = damageTypesService.save(inspection2update.ObjectTypeId, self.dType);
但我需要等待,直到我从服务中获得数据,然后再进一步执行
为此,我在$http解析器中使用了$q
服务,但我仍然从我的服务中得到承诺,并且没有数据
为了让服务等待数据,我必须在代码中更改什么 您正在返回一个承诺,该承诺在
http
调用完成数据获取后得到解决。使用此服务的消费者需要等待承诺解决问题,然后对数据进行处理
使用然后
语法接收承诺数据并进一步执行:
damageTypesService.save(inspection2update.ObjectTypeId, self.dType).then(function(data) {
inspection2update.DamageTypeId = data;
// rest of execution...
});
另外,据我所知,$q
在您的案例中没有任何用处(除非您想与数据混合/制作日志等)。您可以按原样返回$http
调用:
function save(objectTypeId, damageDescription) {
return $http.post(serviceAddress + "save/" + objectTypeId + "/" + damageDescription);
}
与
$q
function save (objectTypeId, damageDescription) {
var deferred = $q.defer();
$http({
url: serviceAddress + "save/" + objectTypeId + "/" ,
method: 'POST',
data: damageDescription
})
.success(function (data) {
deferred.resolve(data);
})
.error(function (data) {
deferred.resolve(data);
});
return deferred.promise;
}
在控制器中使用。然后使用功能
damageTypesService.save(inspection2update.ObjectTypeId, self.dType).then(function(response){
/*use the response here
eg: inspection2update.DamageTypeId = response.id
*/
})
首先,您的服务方法名为post
,您正在调用名为save
的方法。这是个错误吗?第二,我看不出你有什么理由使用$http
服务,因为它的级别很低,而且你的请求很简单。您应该检查它是否提供了更高级别的抽象,并且可以处理像您这样的简单请求。现在,谈谈你的问题。$http
和$resource
始终返回承诺。因此,通常在您的服务或控制器中,您提供了一个回调,该回调接收来自请求的响应并对其进行处理。由于$resource和$http
的方法类似,但是您询问了$http
的问题,我将向您展示如何使用$http
function post(objectTypeId, damageDescription) {
return $http.post(serviceAddress + "save/" + objectTypeId + "/" + damageDescription);
}
现在,在控制器中调用服务方法post()
,如下所示
damageTypesService.post(inspection2update.ObjectTypeId, self.dType).then(mycallback);
function myCallback(response){
inspection2update.DamageTypeId = response; // DamageTypeId now won't be populated until the request is resolved.
}
您的延迟.已解决(数据)的要点是什么?当回调触发时,数据已经被解析。我尝试在我的示例中使用它来获取数据,并且它是有效的。请为您的示例提供这些更改的代码。并解释“它不起作用”的含义。您收到了哪些错误?