循环中含有异步操作,如何实现循环完之后,再执行下面的代码
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() 函数为异步请求函数
以上为全部内容。有意见或疑问请留言。