美文网首页
当 async/await 遇上 forEach

当 async/await 遇上 forEach

作者: pruple_Boy | 来源:发表于2021-03-04 12:53 被阅读0次

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

    • map 针对是返回值处理情况,关于忽略操作不友好,建议使用reduce
    • reduce 不仅仅是官方文档示例,求和的语法。常用就是数组累加,对象属性累加,可友好处理返回值
    • forEach 可友好处理map的忽略问题,return false 相当于 break 效果,跳出循环,return true 相当于 continue。对于累加建议使用 reduce,无需再定义一个新的对象
    • for...of 是 for...in 的优化版本,比直接 for 循环操作集合友好一些
    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 方法的对象被认为是可遍历的。

    相关文章

      网友评论

          本文标题:当 async/await 遇上 forEach

          本文链接:https://www.haomeiwen.com/subject/ucfkqltx.html