angularjs 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) {

我有一个HTTP服务,它将承诺返回到
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.
}

您的延迟.已解决(数据)的要点是什么?当回调触发时,数据已经被解析。我尝试在我的示例中使用它来获取数据,并且它是有效的。请为您的示例提供这些更改的代码。并解释“它不起作用”的含义。您收到了哪些错误?