当 async/await 遇上 forEach

2021-03-04  本文已影响0人  pruple_Boy

js遍历数组常用基本就是 map,reduce,forEach,for...of

return row[prop].reduce((acc, cur, idx) => {
  acc.push({key: row[`${prop}_id`][idx], label: cur });
  return acc;
}, []);

关于和 async/await 结合,测试发现,除了 for...of 外,其余都是异步执行【map 未测试】,即在循环内若使用await,在循环外是不能同步拿到解析的值,reduce第二次直接返回一个 pending 状态的 Promise

// NOTE: 当 async/await 遇上 forEach
const res = [];
for (let val of condition) {
  multiple.val = val;
  const resList = await _queryFormOrProcess(
    ctx,
    { formId, conditions, compId_tip },
    { isForm, errMsg }
  );
  // 以第一条查询为主数据, 合并明细
  if (!res.length) {
    res.push(...resList);
  } else {
    res[0].formData[compId_detail_src].push(
      ...resList[0].formData[compId_detail_src]
    );
  }
}
return res;

for-of 可以遍历各种集合对象的属性值,要求被遍历的对象需要实现迭代器 (iterator) 方法,例如 myObjectSymbol.iterator 用于告知 JS 引擎如何遍历该对象。一个拥有 Symbol.iterator 方法的对象被认为是可遍历的。

上一篇下一篇

猜你喜欢

热点阅读