我有一个工厂去服务器抓取一些参考数据。
问题在于下面的http get调用是异步的,所以只要它被调用,它就会转到下一行。因此,使用下面的代码,它将返回数据为null,因为在http调用完成时,并且我的回调开始,要复制到数据变量,它已经退出该方法。
如何让它等到回调函数运行后再继续下一行?
顺便说一句,我在这里使用Angular。
app.factory('referenceDataFactory', ['$http', function ($http) {
var factory = [];
factory.getSports = function () {
var data;
$http.get('/Home/GetSports').success(
function (obj) {
data = obj;
});
return data;
// return [{ id: 1, name: 'Volleyball' }, { id: 2, name: 'Football' }, { id: 3, name: 'Tennis' }, { id: 4, name: 'Badminton' }];
}
return factory;
}]);
答案 0 :(得分:6)
AngularJs中的http API将返回promise。您应该返回整个承诺,并且在调用“getSports”的函数中将代码置于“成功”回调中。
这是一个example。
var app = angular.module('myApp', []);
app.factory('referenceDataFactory', ['$http', function ($http) {
var factory = [];
factory.getSports = function () {
return $http.get('/echo/js/?delay=6&js="test"')
}
return factory;
}]);
function HelloCtrl($scope, referenceDataFactory) {
referenceDataFactory.getSports().success(function (result) {
$scope.fromFactory = result;
});
};