【发布时间】:2016-11-04 16:09:17
【问题描述】:
假设我有一个类似的功能:
var bigArray = [1,2,3,4,5.........n];
for(var i=0; i<bigArray.length; i++){
if(someCondition){
setTimeout(function(){
..do_stuff..
callSomeFunction();
}, someDelayTime);
}
if(someCondition){
setTimeout(function(){
..do_stuff..
callSomeFunction();
}, someDelayTime);
}
if(someCondition){
setTimeout(function(){
..do_stuff..
callSomeFunction();
}, someDelayTime);
}
.
.
.
.
.
.
.
.
if(someCondition){
setTimeout(function(){
..do_stuff..
callSomeFunction();
}, someDelayTime);
}
}
现在我想要从这个函数中得到的是,当所有条件都执行了它们的预期任务时,它才应该移动到 FOR 循环的下一次迭代。换句话说,FOR 循环中的i=0 应该更改为i=1 等等,如果 FOR 循环内的所有条件在当前迭代中都完成了它们的工作。
目前这段代码的行为是非常随机的(因为我相信setTimeout)。我怎样才能按照我的期望进行这项工作?
我最近阅读了有关 promises 的内容(对它们了解不多),但我不确定如何在这段代码中实现它们,或者它们是否能在这种情况下工作......
【问题讨论】:
-
您不能将同步循环与这样的异步行为混合在一起。您可能想要做的是将 promise 映射到数组并对其进行排序。
-
对不起,但由于我对承诺的了解很少,我无法解释您建议的解决方案。不过感谢您的快速回复!
-
@TusharShukla 我认为也可以对原创想法进行投票。
-
@mortezaT 我相信你说的是接受的答案。好吧,我真的很感谢大家的帮助,我很感谢他们,但是我仍然没有按照我的代码要求解决这个问题。当然,一旦我找出解决方案,我会接受答案。
-
@TusharShukla 那有什么问题?
标签: javascript jquery for-loop settimeout es6-promise