weixin

以数组的元素为参数,逐个运行异步函数

日期: March 12, 2021 作者:网站维护

以数组的每一个项作为参数,运行异步的函数。需要在等一个运行完之后运行下一个。变成所谓同步。
async模块提供了each这个函数,网上查了下,发现其实自己也可以写一个。

function asynhand(a, callback) {
    console.log('hi', a);
    setTimeout(callback, 2000);
}

var i = 0;
var running = 0;

function each(arr, itera) {
    if (i >= arr.length) return;
    itera(arr[i], () => each(arr, itera));
    i++;
}

list = ['a','b','c','d','e','f'];

each(list, asynhand);

可以同时运行多个,lim为同时运行的限制数量。把回调函数单独写到了一边,用箭头函数感觉不好读。

function asynhand(a, callback) {
    console.log('hi', a);
    setTimeout(callback, 2000);
}

var i = 0;
var running = 0;

function eachlim(arr, itera, lim) {    
    if (i >= arr.length) return;
    itera(arr[i], c);
    running++;
    i++;
    if ( running < lim ) eachlim(arr, itera, lim);

    function c(){
        running--;
        eachlim(arr, itera, lim);
    }
}

list = ['a','b','c','d','e','f'];

eachlim(list, asynhand, 3);

广告内容为平台自动生成