循环内的异步函数排队,无需回调即可按顺序执行
queue async functions inside loop to execute in order without callback
我知道这里还有其他一些帖子有类似的问题,但没有一个对我有帮助......
我需要按顺序(它们是异步的)执行一些函数来对 svg 元素进行动画处理,一个在前面的结尾之后,但在循环中。这是我的代码:
function begin (i,time){
setTimeout(function(){
$('.pie-chart animate')[i].beginElement();
},time);
}
for(var i=0;i<$('.pie-chart animate').length;i++){
dur = $('.pie-chart animate').eq(i).attr('dur');
time = parseInt(dur.substr(0,1));
time = time * 1000;
begin(i,time);
}
在此之后,所有动画将同时执行。谁能帮我?,谢谢^^。
'按顺序,我认为你的意思是同步的,而(不是AJAX)我认为你的意思不是异步的。 要正确执行此操作(异步),您应该使用回调。 像这样:
function begin (i){
if (i >= $('.pie-chart animate').length) return;//you're done
dur = $('.pie-chart animate').eq(i).attr('dur');
time = parseInt(dur.substr(0,1));
time = time * 1000;
setTimeout(function(){
$('.pie-chart animate')[i].beginElement();
begin(i+1);
},time);
}
begin(0);
看起来您的时间已在循环中重置,因此,如果您的所有动画中都有dur 9s,则所有动画将在9秒后开始。
在循环中,您需要在当前元素之前执行所有迭代元素的持续时间总和的开始。看例子:
function begin (i,time){
setTimeout(function(){
$('.pie-chart animate')[i].beginElement();
},time);
}
var time = 0;
for(var i=0;i<$('.pie-chart animate').length;i++){
dur = $('.pie-chart animate').eq(i).attr('dur');
time += parseInt(dur, 10) * 1000;
begin(i, (i===0)?0:time);
}
相关文章:
- 如何在回调函数中执行流
- 如何在`window.open`之后执行回调
- 等待回调函数执行
- 带有Spring的$.getJSON未执行回调
- bookmarklet中的jQuery.getScript()进行回调,但没有成功执行插件
- Dojo AMD加载程序执行定义具有空/缺失依赖项的回调
- 不同'单击'不同脚本中的回调:我可以控制执行顺序吗
- TypeError:执行回调时,回调不是函数
- Javascript:对回调创建的对象执行方法
- AJAX成功回调-执行javascript时出现问题
- nodeJS中的承诺/承诺中的回调/执行顺序是不对的
- 主干:中止以前的路由器回调执行
- 控制器函数作为回调执行
- 函数/回调执行可以被外部调用中断吗?
- React setState回调执行序列
- 一个关于nodejs回调执行顺序问题的例子,我不能理解
- 禁用返回按钮,直到回调执行
- 回调函数内部声明的变量是否保留在内存中,还是在回调执行结束时销毁?
- 在javascript中,使用回调执行多个异步函数的最佳实践是什么?
- Javascript中的回调执行序列,从IndexeddB检索