【问题标题】:Async/await parsing json异步/等待解析 json
【发布时间】:2019-02-27 23:37:42
【问题描述】:

所以我有一段像这里这样的代码,需要重构它以使用 map/forEach。

       async function asyncForEach(array, callback) {
          for (let index = 0; index < array.length; index++) {
              await callback(array[index], index, array);
          }
       }

但是当我像下面这样使用 map 时,它只会解析整个 json,而无需等待数组的各个条目在回调函数中延迟发送每个条目。

      async function asyncForEach(array, callback) {
       await array.map(async (item, index) => {
         await callback(array[index], index, array);
       });
      }

任何帮助将不胜感激。

【问题讨论】:

  • 我很困惑,有人想用看起来很“花哨”的东西破坏一个可读、可维护、快速的代码解决方案。但我是谁来评判:)
  • @larwa1n ...虽然速度更快(如果打算并行执行)

标签: javascript json async-await


【解决方案1】:

您必须在数组上使用 Promise.all 作为 await(尽管它包含承诺)什么都不做:

 await Promise.all(array.map(/*...*/));

我会这样写:

  const asyncForEach = (array, callback) =>
     Promise.all(array.map(callback));

【讨论】:

  • 不要忘记删除回调前面的await
  • @kemicofa 嗯,...不是吗?
  • 我认为这不会与原始代码 1:1 映射。这将同时触发所有请求并等待它们。原来的 for 一次只会有 1 个。
  • @zero298 是的,我认为这就是用户想要的(可能)。
  • 这个解决方案仍然贯穿整个 json 文件,即触发 1 个条目并等待 3 秒。有什么办法让它一次触发 1 个数组条目?
猜你喜欢
  • 2019-06-20
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2014-01-09
  • 1970-01-01
相关资源
最近更新 更多