For 循环异步操作问题小结

发布于 2022-06-27 16:34:47 字数 1588 浏览 882 评论 0

在实际开发中,异步总是不可逃避的一个问题,尤其是 Node.js 端对于数据库的操作涉及大量的异步,同时循环又是不可避免的,想象一下一次一个数据组的存储数据库就是一个典型的循环异步操作,而在循环之后进行查询的话就需要确保之前的数据组已经全部存储在了数据库中。可以得到关于循环的异步操作主要有两个问题:

  • 如何确保循环的所有异步操作完成之后执行某个其他操作
  • 循环中的下一步操作依赖于前一步的操作,如何解决

如何确保循环的所有异步操作完成之后执行某个其他操作

方法一:设置一个 flag,在每个异步操作中对 flag 进行检测

let flag = 0;
for(let i = 0; i < len; i++) {
  flag++;
  Database.save_method().exec().then((data) => {
      if(flag === len) {
            // your code
      }
  })
}

方法二:将所有的循环放在一个 promise 中,使用 then 处理

 new Promise(function(resolve){
      resolve()
 }).then(()=> {
     for(let i = 0; i < len; i++) {
           Database.save_method().exec()
     }
}).then(() => {
    // your code
})

循环中的下一步操作依赖于前一步的操作,如何解决

方法一:使用递归,在异步操作完成之后调用下一次异步操作

function loop(i){
  i++;
  Database.save_method().exec().then(() => {
      loop(i)
    })
}

方法二:使用async和await

async function loop() {
    for(let i = 0; i < len; i++) {
         await Database.save_method().exec();
    }
}

以上的方法基本上能解决大部分的问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

影子的影子

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

烙印

文章 0 评论 0

singlesman

文章 0 评论 0

独孤求败

文章 0 评论 0

晨钟暮鼓

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文