forEach的异步变同步

    技术2025-01-09  18

    需求:使forEach函数后续函数同步执行

    即 :

    // 代码块1 async function_a () { await list.forEach(async ele => { await function_b () }) function_c () // function_c () 等待上面forEach函数体执行完毕后执行 }

    但是以上代码无法运行,另做他法:

    // 代码块2 function_a () { Promise.all( list.map( ele => { return new Promise(async (resolve, reject) =>{ await function_b() resolve() }) }) ).then(() =>{ function_c () }) }

    说明: 代码块2完成了代码块1所需要的功能: function_c () 成功在list函数迭代后执行

    用途: function_b () 一般为异步网络请求 且需要并发实现,function_c ()的执行需要list.map() 的迭代结果。

    补充知识点: 1.Promise.all(iterable) 其内部需为可迭代类型(即列表)。 2.map() 函数返回一个列表 刚好满足 1 的需求。 3.forEach() 函数返回Undefined ,同样情况下不使用map()而使用forEach() 无法满足Promise.all(iterable) 4.map() 函数对之前的列表不做修改,而是产生一个新的列表,异步执行新列表构建时,需要考虑其内部次序排列问题。

    Processed: 0.009, SQL: 9