如何从AngularJs的其他客户端发出$ http请求?(How to make a $http request from the rest client in AngularJs?)
当我在第一个服务中通过$ http发出请求时,有这种情况,然后我想操纵其他服务中的数据。 对于一些reassons我返回的对象是空的。 有什么建议?
.factory('widgetRestService',['$http','$log',function($http,$log){ var serviceInstance = {}; serviceInstance.getInfo = function(){ var request = $http({method: 'GET', url: '/rest/widgets/getListInfoDashboards'}) .then(function(success){ serviceInstance.widgets = success.data; $log.debug('serviceInstance.widgets SUCCESS',serviceInstance.widgets); },function(error){ $log.debug('Error ', error); $log.debug('serviceInstance.widgets ERROR',serviceInstance.widgets); }); return request; }; serviceInstance.getAllWidgets = function () { if (serviceInstance.widgets) { return serviceInstance.widgets; } else { return []; } }; return serviceInstance; }]) .factory('OtherService',['widgetRestService','$log', function(widgetRestService, $log){ widgetRestService.getInfo(); // and now I want to return widgetRestService.widgets [{things},{things},{things}] return widgetRestService.getAllWidgets(); // returns [] }])结果:[]
Have this scenario when I make a request via $http in the first service, and then I want to manipulate the data in other service. For some reassons my returned object is empty. Any advice ?
.factory('widgetRestService',['$http','$log',function($http,$log){ var serviceInstance = {}; serviceInstance.getInfo = function(){ var request = $http({method: 'GET', url: '/rest/widgets/getListInfoDashboards'}) .then(function(success){ serviceInstance.widgets = success.data; $log.debug('serviceInstance.widgets SUCCESS',serviceInstance.widgets); },function(error){ $log.debug('Error ', error); $log.debug('serviceInstance.widgets ERROR',serviceInstance.widgets); }); return request; }; serviceInstance.getAllWidgets = function () { if (serviceInstance.widgets) { return serviceInstance.widgets; } else { return []; } }; return serviceInstance; }]) .factory('OtherService',['widgetRestService','$log', function(widgetRestService, $log){ widgetRestService.getInfo(); // and now I want to return widgetRestService.widgets [{things},{things},{things}] return widgetRestService.getAllWidgets(); // returns [] }])Result: [ ]
最满意答案
在尝试访问它返回的数据之前,您必须等待您的HTTP请求完成。 您可以通过访问getAllWidgets返回的Promise中的getInfo来完成此getInfo 。
.factory('OtherService', ['widgetRestService','$log', function(widgetRestService, $log) { return widgetRestService.getInfo().then(function () { return widgetRestService.getAllWidgets(); }); }])OtherService某处使用其他服务:
OtherService.then(function (widgets) { // do something with `widgets`... });You must wait for your HTTP request to complete before trying to access the data that it returns. You can do this by accessing getAllWidgets within a then attached to the Promise returned by getInfo.
.factory('OtherService', ['widgetRestService','$log', function(widgetRestService, $log) { return widgetRestService.getInfo().then(function () { return widgetRestService.getAllWidgets(); }); }])Consume OtherService somewhere:
OtherService.then(function (widgets) { // do something with `widgets`... });更多推荐
发布评论