javascript - 在循环中向 Javascript 对象动态添加键/值对

标签 javascript angularjs loops object

希望在 Angular 工厂中创建数据对象,我可以返回 Controller ,但遇到一些问题:

app.factory('simpleFactory', function ($http) {
    var mykey = 'akjhas3892kh8adsak9';
    var apiResource = [{
        type: 'type1',
        abbr: 'abc'
    }, {
        type: 'type2',
        abbr: 'efg'
    }, {
        type: 'type3',
        abbr: 'hij'
    }];
    var data = {};
    var setDataKeyValues = function (key, value) {
        data[key] = value
    };
    for (var i = 0; i < apiResource.length; i++) {
        var key = apiResource[i].type;
        $http.get('http://api.com/v1/path/' + key + '/' + apiResource[i].abbr + '/anotherpath?apikey=' + mykey).success(function (info) {
            setDataKeyValues(key, info);
        });
    }
    return data;
});

Angular http请求返回一个JSON对象,但是当返回数据对象时,它是空的。将这些键/值添加到该对象的正确原因是什么?

最佳答案

$http.get 是异步的,而您的返回是同步的。您需要使用队列。 Angular 内置了此功能。

app.factory('simpleFactory', function ($http) {
    ...
    var promises = [];
    for (var i = 0; i < apiResource.length; i++) {
        var key = apiResource[i].type;
        var promise = $http.get('http://api.com/v1/path/' + key + '/' + apiResource[i].abbr + '/anotherpath?apikey=' + mykey).success(function (info) {
            setDataKeyValues(key, info);
        });
        promises.push(promise);
    }

    // Once all asynchronous HTTP GET requests are complete
    $q.all(promises).then(function () {
        // Do something with the data, e.g.
        $rootScope.apply();
    });

   return data;
});

simpleFactory 是一个用词不当。工厂方法同步返回一个对象,然后在您注入(inject)它的任何地方提供该对象。您在回调中设置的值稍后可用。

关于javascript - 在循环中向 Javascript 对象动态添加键/值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22926640/

相关文章:

python - 循环填充Python中的矩阵

java - 我可以像这样比较结果集吗?我面临以下错误

html - Angular Bootstrap Carousel - 在不拉伸(stretch)的情况下使图像适合方框

angularjs - 将 $http 与 $exceptionHandler 一起使用

c# - 在嵌套循环中,Parallel.For 应该用在外循环还是内循环?

JavaScript 转置数据

javascript - JQuery Bracket 插件渲染多个锦标赛括号

javascript - 如何将变量传递给 setTimeout 函数?

javascript - AngularJS - promise 重新抛出捕获的异常

javascript - angularjs 翻译以所选语言显示键的值