我有以下函数在models
内创建了一个对象数组,但是当我在应用程序中进一步使用models
时,我无法遍历它#s提取数据的内容。
到目前为止我尝试过的包含单个console.log()
消息的每个循环方法只会在models
包含两个<<1>}时打印出消息一次消息/ strong>对象所以我认为问题实际上在于models
的创建。如果我创建一个承诺并在完成处理后打印出models.devices
的值,则返回一个空数组。
有什么想法吗?
var d = devices.split(','),
count = 0,
models = {devices:[]};
angular.forEach(d, function (device, i) {
var index = i;
if (index <= 1) {
var deviceName = device.replace(/ /g,"+").toLowerCase(),
req = '?__url_path_param=' + deviceName;
$http
.get('/api/cheapest_by_name' + req)
.success(function (obj) {
models.devices.push(obj.device);
count++;
});
}
});
$q.all(models).then(function (data) {
apiDeal.multi(data, 3, 2);
});
然后......(在api-deal.factory.js中)
function apiDeal($http, $rootScope) {
return {
multi: function (devices, limit, type) {
console.log(devices); // equal to below image
console.log(devices.devices); // equal to '[]'
}
}
}
然后我需要在devices
apiDeal.multi
答案 0 :(得分:2)
您需要保留一系列承诺,这些承诺应使用models
取代您$q.all
。它必须是一系列承诺。
所以将代码更改为:
var d = devices.split(','),
count = 0,
models = {devices:[]},
promises = [];
var promise = $http
.get('/api/cheapest_by_name' + req)
.success(function (obj) {
models.devices.push(obj.device);
count++;
});
promises.push(promise);
然后,做:
$q.all(promises).then(function (data) {
apiDeal.multi(data, 3, 2);
});