// 异步不阻塞的耗时循环程序
// start 循环起始变量
// end   循环结束变量,是闭区间
// taskFn 是一个回调函数,形式为 function task(i) { },且是同步调用
// endFn 是一个回调函数,循环结束时执行
function asynForEach(start, end, taskFn, endFn) {
    this.__index = start;
    this.__end = end;

    function __step() {
        taskFn(__index);

        if (__index < __end) {
            __index++;
            setTimeout(__step, 10);
        } else {
            if (endFn != null) {
                endFn();
            }
        }
    }

    setTimeout(__step, 10);
}

// 待处理的数据
var g_data = ["data1","data2","data3","data4"];

var start = 0;
var end = g_data.length - 1;
asynForEach(start, end, OnTask, OnEnd);

// 注意这个函数需是同步操作
function OnTask(i) {
    console.log("OnTask:" + g_data[i]);
}

function OnEnd() {
    console.log("OnEnd");
}



本文链接地址: JavaScript:异步不阻塞的耗时循环程序
https://blog.qingfengju.com/index.asp?id=426

上一篇: 在Windows7中使用Windows10的TTS语音包
下一篇: 将VSCode作为绿色便携版运行

分类:Web开发 查看次数:1836 发布时间:2020/4/2 16:21:42