Angular:如何在$http请求成功后才返回

Angular: How to defer return until after the $http request succeeds

本文关键字:成功 请求 返回 http Angular      更新时间:2023-09-26

在我的主模块中,我想创建一个解析json文件并将内容推送到数组的服务,之后我想服务有数组返回,所以它很容易被任何控制器访问。问题是函数在$http请求完成之前运行,所以它总是返回一个空数组

dashModule.factory('dataFetch', function($http) {
    var emailArray = [];
    $http.get('../data/emails.json').success(function log(obj) {
        for (var i = 0; i < obj.length; i++) {
            emailArray[i] = obj[i];
        }
    });
    return {
        test: function() {
            return emailArray;
        }
    };
});

使用承诺,如:

dashModule.factory('dataFetchService', function($http) {
    var myReq = function() {
        return $http.get('../data/emails.json').then(function(response){
            return response.data;
        });
    };
    return { myReq: myReq };
});

function getMyReq($scope, dataFetchService) {
    var myReqPromise = dataFetchService. myReq();
    myReqPromise.then(function(result) {        
        console.log(result);
    });
}