美文网首页
如何在for循环方法中使用异步后才继续往下执行

如何在for循环方法中使用异步后才继续往下执行

作者: 小丿贱 | 来源:发表于2019-11-22 16:02 被阅读0次

问题描述

在做一个业务需求的时候,遇到过需要在一个for循环里面异步调用接口,执行for循环后才继续执行之后的代码。因为平常有用到async/await和ES6的forEach,二话不说就一顿劈里啪啦的操作,大概代码如下:

function demo() {
  const arr = [1,2,3];
  const result = [];
  arr.forEach(async (item) => {
    const data = await getData(item);  // 这边是一个异步接口,返回一个promise
    result.push(data);
  })
  return result;
}

通过断点,结果都是先执行return result了,再去执行异步操作

原因

通过查看forEach源码,发现forEach里面while循环下每次都会调用回调函数(callback),这部分就不细说了,有兴趣的可以去看下源码。

解决办法

forEach改成for,并使用Promise.all,代码如下:

async function demo() {
  const arr = [1,2,3];
  const result = [];
  for(let i = 0; i < arr.length; i++) {
    const data = getData(item);
    result.push(data); // 直接存储promise
  }
  result  = await Promise.all(result);
  return result;
}

相关文章

  • 如何在for循环方法中使用异步后才继续往下执行

    问题描述 在做一个业务需求的时候,遇到过需要在一个for循环里面异步调用接口,执行for循环后才继续执行之后的代码...

  • 异步与回调

    异步 我对异步的理解: 异步是不等结果,往下执行;同步是等结果出现后,再往下执行 代码中出现异步程序时,如例2中,...

  • GCD调度组

    使用场景 在实际开发中,需要开启N个异步线程,(如异步下载N张图片,下载结束后需要继续执行某项任务),需要依赖N个...

  • GCD组(多任务执行)

    使用场景 在实际开发中,需要开启N个异步线程,(如异步下载N张图片,下载结束后需要继续执行某项任务),需要依赖N个...

  • vue使用递归函数,循环执行方法

    递归方法 引用 需要循环执行的方法 注:不要使用for循环,for循环中嵌套了异步请求会导致请求顺序错乱 OK,就...

  • 第二十章 异步编程

    async/await特性的结构 一个程序调用某个方法,等待其执行所有处理后才继续执行,这种方法是同步的。异步的方...

  • 如何在异步方法都执行后再执行

    在异步方法执行后再执行的直接解决方案就是写回调。可是如果想让所有的(例如循环调用的若干次)异步方法全部执行完之后再...

  • C#回调函数callback使用方法

    在异步通信中,主线程不会等待线程执行结束,而是直接往下运行。然后回调函数会继续执行,其中EndInvoke方法会接...

  • Flutter (十一)异步执行

    异步执行 异步执行做成同步的效果 需要使用async和await关键字 【串行】 多个异步执行完之后再往下走 【...

  • 同步和异步的区别

    同步 (Synchronous)方法一旦被调用就必须等待方法执行完才可以继续向下执行其他操作。 异步(Asynch...

网友评论

      本文标题:如何在for循环方法中使用异步后才继续往下执行

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