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