循环中含有异步操作,如何实现循环完之后,再执行下面的代码

2023-05-03  本文已影响0人  麦田_426

需求

获取进行了某种类似文件设置的一类数据的集合,但是,要进行逐个判断当前文件是否在服务器中存在。 所以循环里面有个异步请求

问题

因为项目是基于jquery框架的,一开始尝试在 $.each() 中 通过Promise实现以上需求,但是稳定性不够高,偶尔会出错。(也可能是我的用法有误,如有大佬,请留言指教)
后来,事实证明,foreach或者 each 都无法很好的实现以上需求;使用for....of 才是最佳选择。

相关代码

async function getAllLutInfo(){
    let ch_elem = $('#design').find('.pa.baseOutIn').toArray();
    let lut_arrs = [];
    for(let ele of ch_elem){
        let v_streamtype = $(ele).attr('data-streamtype');
        if(v_streamtype !== 'Audio'){
            let lut_val = $(ele).children('.btn_audio_video').attr('data-lut');  //文件路径
            let lut_have = await checkChannelLut(lut_val);
            if(lut_val && lut_have == 'TRUE'){
                let obj = {
                    'Lut': lut_val,
                };
                lut_arrs.push(obj);
            }
        }
    }
    return lut_arrs;
}

其中,第二行,因为find() 方法获取到的是jquery对象,不具备Iterator 结构,所以无法使用 for... of 进行遍历,要使用 toArray()转化为真正的数组
checkChannelLut() 函数为异步请求函数
以上为全部内容。有意见或疑问请留言。

上一篇 下一篇

猜你喜欢

热点阅读