Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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 在for循环内部完成API获取后如何调用函数?_Javascript_Angularjs_For Loop_Promise_Angular Promise - Fatal编程技术网

Javascript 在for循环内部完成API获取后如何调用函数?

Javascript 在for循环内部完成API获取后如何调用函数?,javascript,angularjs,for-loop,promise,angular-promise,Javascript,Angularjs,For Loop,Promise,Angular Promise,下面是一个for循环,它将运行最多时间,在该for循环中,我调用GET返回一些需要添加到我的obj对象中的数据 在调用TagFactory.buildSavedView(obj)行之前,我需要知道所有3个get以及for循环的何时完成。想法 for (var i = 0; i < termIDs.length; i++) { ApiFactory.getTagData(tickers[i], termIDs[i]).then(function(data) { sin

下面是一个for循环,它将运行最多时间,在该for循环中,我调用GET返回一些需要添加到我的
obj
对象中的数据

在调用
TagFactory.buildSavedView(obj)
行之前,我需要知道所有3个
get
以及
for循环的
何时完成。想法

for (var i = 0; i < termIDs.length; i++) {
    ApiFactory.getTagData(tickers[i], termIDs[i]).then(function(data) {
        singleTagArray.push(data.data.tickers);

        var updatedTag   = TagFactory.renderDirections(singleTagArray, null, period);
            newTagObject = updatedTag[0];

        tags.push(newTagObject);

        finishObjSetup(tags);
        console.log('viewHeaderDirect > obj: ', obj);
    });
}

TagFactory.buildSavedView(obj);
vm.loadSavedModal = false;
for(变量i=0;iobj:',obj);
});
}
TagFactory.buildSavedView(obj);
vm.loadSavedModal=false;

您可以使用一个简单的计数器:

var y = 0;

for (var i = 0; i < termIDs.length; i++) {
  ApiFactory.getTagData(tickers[i], termIDs[i]).then(function (data) {
    y++;
    singleTagArray.push(data.data.tickers);

    var updatedTag = TagFactory.renderDirections(singleTagArray, null, period);
    newTagObject = updatedTag[0];

    tags.push(newTagObject);

    finishObjSetup(tags);
    console.log('viewHeaderDirect > obj: ', obj);

    if (y === termIDs.length) {
      TagFactory.buildSavedView(obj);
      vm.loadSavedModal = false;
    }

  });
}
vary=0;
对于(变量i=0;iobj:',obj);
如果(y==termIDs.length){
TagFactory.buildSavedView(obj);
vm.loadSavedModal=false;
}
});
}

您需要使用
$q.all
,但需要创建一个承诺数组,并将其传递给将执行其
$q.all
。然后,只有在所有承诺都得到执行时才使用

代码

var promises = [];
for (var i = 0; i < termIDs.length; i++) {
    var promise = ApiFactory.getTagData(tickers[i], termIDs[i]).then(function(data) {
        singleTagArray.push(data.data.tickers);

        var updatedTag   = TagFactory.renderDirections(singleTagArray, null, period);
            newTagObject = updatedTag[0];

        tags.push(newTagObject);

        finishObjSetup(tags);
        console.log('viewHeaderDirect > obj: ', obj);
    });
    promise.push(promise); //creating promise array.
}

$q.all(promise).then(function(){
    //here the call will goes after all calls completed.
})
var承诺=[];
对于(变量i=0;iobj:',obj);
});
promise.push(promise);//创建promise数组。
}
$q.all(promise).then(function(){
//在这里,所有呼叫完成后,呼叫将继续。
})

jQuery@CoolBlue为什么jQuery在angular拥有
$q
时会延迟。有关更多详细信息,请查看我的答案@PankajParkar的可能副本如果您有时间,还有一个承诺问题要问您:)@LeonGaban我在看it@LeonGaban实际上是2分钟。。我很晚才看到这个问题:D谢谢:)