Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过对象数组的角度循环_Javascript_Arrays_Angularjs - Fatal编程技术网

Javascript 通过对象数组的角度循环

Javascript 通过对象数组的角度循环,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我有以下功能,可以在模型中创建一个对象数组,但是当我使用模型进一步深入应用程序时,我无法循环它的内容以提取数据 到目前为止,我尝试过的每个循环方法都包含一个console.log()。如果我创建一个承诺并在处理完models.devices后打印出其值,则返回一个空数组 有什么想法吗 var d = devices.split(','), count = 0, models = {devices:[]}; angular.forEach(d, function (device,

我有以下功能,可以在
模型
中创建一个对象数组,但是当我使用
模型
进一步深入应用程序时,我无法循环它的内容以提取数据

到目前为止,我尝试过的每个循环方法都包含一个
console.log()。如果我创建一个承诺并在处理完
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);
});


然后我需要在
apiDeal.multi

中循环查看
设备。您需要遵守一系列承诺,这些承诺将取代您正在使用的
$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);
});

您如何等待HTTP请求完成?我看到您正在放弃$http返回的允许您这样做的承诺。不太确定什么对您不起作用。模型是未定义的还是什么?无法循环浏览其内容是什么意思?@OmriAharon
models.devices
为空或undefined@MattiVirkkunen
$http.success…
因此,您似乎希望
模型
成为一个全局变量(也值得一看,为什么,也许您应该将其放在服务中)。尝试在不使用
var
的情况下定义它,您可能会遇到范围问题。仅凭上面的代码很难判断。请注意,
$q.all()
将把所有承诺结果的数组传递到函数的
数据
参数
中,然后
。在这种情况下,如果可能的话,最好只做
apiDeal.multi(models.devices,3,2)
,否则在将数据传递给apiDeal.multi()
@JcT之前,必须对数据进行排序。我猜现在OP正在获取他的数据,他将更改一些代码:)
$q.all(promises).then(function (data) {
    apiDeal.multi(data, 3, 2);
});