如何在继续之前让Javascript等待异步调用?

时间:2013-07-08 08:19:13

标签: javascript angularjs

我有一个工厂去服务器抓取一些参考数据。

问题在于下面的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;

}]);

1 个答案:

答案 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;
    });
};