Javascript 从promise结果中操作数据

Javascript 从promise结果中操作数据,javascript,angularjs,angular-promise,angular-services,Javascript,Angularjs,Angular Promise,Angular Services,一旦我从http请求中获得数据,我就会调用一些服务,向接收到的数据中添加一些信息。i、 e数据+服务()=更新数据。 现在,在这个更新的数据上,我正在应用一些计算,并在视图中显示它。 但这东西不起作用。我试图将此计算添加到prom.success本身,但仍然没有得到更新的数据。我尝试将setInterval()设置为$scope.abc,但有时它不会显示 请帮我解决这个问题 谢谢您在服务中编写一个方法来解析数据。在方法中,首先调用$http以获取数据。获得数据后,请致电第二服务,该服务将添加额外

一旦我从http请求中获得数据,我就会调用一些服务,向接收到的数据中添加一些信息。i、 e数据+服务()=更新数据。 现在,在这个更新的数据上,我正在应用一些计算,并在视图中显示它。 但这东西不起作用。我试图将此计算添加到prom.success本身,但仍然没有得到更新的数据。我尝试将setInterval()设置为$scope.abc,但有时它不会显示

请帮我解决这个问题


谢谢您

在服务中编写一个方法来解析数据。在方法中,首先调用$http以获取数据。获得数据后,请致电第二服务,该服务将添加额外信息。完成后(即第二次服务承诺已解决),解决更新数据。从控制器调用服务中的此方法,并等待解决。当问题解决时然后“在将显示数据的作用域上调用您的方法”。我会为你贴一把小提琴

你可以检查小提琴

服务

var prom = $http.get('url');
prom.success(function(data){
  //here calling some service and updating the data 
});
$scope.abc = function(){
//doing some calculation with updated data
}
注意:callApi方法是$http调用的伪方法。用实际的API调用替换它

控制器

myApp.factory('service', function($http, $q) {
  var addInfoToData = function(data) {
    var deferred = $q.defer();
    data.updatedInfo = "Some dummy info";
    deferred.resolve(data);
    return deferred.promise;
  };

  //Dummy Method for $http call
  var callApi = function() {
    var deferred = $q.defer();
    var dummyData = {
      Id: 1,
      Name: "Fake Info",
      Value: 15
    };
    deferred.resolve(dummyData);
    return deferred.promise;
  }

  var getData = function() {
    var deferred = $q.defer();
    //Replace with $http
    callApi().then(function(data) {
      addInfoToData(data).then(function(updatedData) {
        deferred.resolve(data);
      })
    })
    return deferred.promise;
  }

  return {
    getData: getData
  }
})

您必须执行一些计算并将其保存在
$scope.xyz
变量中,然后再次发布该变量data@user2827761有帮助吗?还是你在找别的?谢谢你@Pratik Bhattacharya。它对我有用。如果我调用另一个服务而不是data.updateInfo=“Some dummy info”;若要更新数据,则会出现错误。。服务未定义。我尝试正确地使用依赖项注入,但仍然出现错误。谢谢你,我不明白这个问题。你能详细说明一下吗。您正在尝试注入另一个服务以进行http调用吗?是的,我正在注入另一个服务以进行http调用,然后将结果添加到旧数据中。您遇到了什么错误?我认为您注入服务的方式存在一些问题。如果你分享你的代码(fiddler或plunkr),我可以试试看。
function MyCtrl($scope, service) {
  $scope.name = 'Superhero';
  $scope.abc = function(data) {
    data.Value = data.Value / 100;
    $scope.displayData = data;
  }
  var getData = function() {
    service.getData().then(function(data) {
      $scope.abc(data);
    })
  }

  getData();
}