1

我需要翻译价值工厂。这个工厂从服务器接收 translateData。和角度控制器调用 convertValue 函数。但 $http 是异步方法,因此控制器获得未定义的值。因为尚未收到 http 响应。

我想知道我可以工厂初始化完成(=从服务器下载数据)并按顺序创建控制器。

angular.module("app")
.factory("service", function ($http) {
    var allDataMap = {};

    $http({
        method: 'GET',
        url: '/data'
    }).then(function (response) {
        angular.forEach(response.data.datas, function (value) {
            allDataMap[value.key] = value.value;
        });
    });


    return {
        convertValue: function (key) {
            return key + '(' + allDataMap[key] + ')';
        },  
    };
});
4

1 回答 1

0

您正在考虑以同步方式完成异步调用。这不会发生,您必须等到 ajax 调用完成,您可以使用 Promise 轻松实现。

angular.module("app")
.factory("service", function ($http) {
    var allDataMap = {};
    // create a promise
    var promise = $http({
        method: 'GET',
        url: '/data'
    }).then(function (response) {
        angular.forEach(response.data.datas, function (value) {
            allDataMap[value.key] = value.value;
        });
        return allDataMap;
    });


    return {
        convertValue: function (key) {
            // wait until promise finish 
            return promise.then(function() {
               return key + '(' + allDataMap[key] + ')';
            });
        },  
    };
});
于 2018-11-02T08:57:30.243 回答