希望在 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/