前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >for循环异步操作问题小结

for循环异步操作问题小结

作者头像
用户1515472
发布2019-07-24 14:18:41
1.8K0
发布2019-07-24 14:18:41
举报
文章被收录于专栏:忽如寄的前端周刊

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

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

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

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

代码语言:javascript
复制
let flag = 0;
for(let i = 0; i < len; i++) {
  flag++;
  Database.save_method().exec().then((data) => {
      if(flag === len) {
            // your code
      }
  })
}

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

代码语言:javascript
复制
 new Promise(function(resolve){
      resolve()
 }).then(()=> {
     for(let i = 0; i < len; i++) {
           Database.save_method().exec()
     }
}).then(() => {
    // your code
})

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

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

代码语言:javascript
复制
function loop(i){
  i++;
  Database.save_method().exec().then(() => {
      loop(i)
    })
}

方法二:使用async和await

代码语言:javascript
复制
async function loop() {
    for(let i = 0; i < len; i++) {
         await Database.save_method().exec();
    }
}

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何确保循环的所有异步操作完成之后执行某个其他操作
  • 循环中的下一步操作依赖于前一步的操作,如何解决
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档