博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
for循环异步操作问题小结
阅读量:6251 次
发布时间:2019-06-22

本文共 925 字,大约阅读时间需要 3 分钟。

在实际开发中,异步总是不可逃避的一个问题,尤其是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();    }}复制代码

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

转载地址:http://bgysa.baihongyu.com/

你可能感兴趣的文章
Oracle SQL Developer 连接 MySQL
查看>>
PHP 输出数据库中文是问号
查看>>
SameSite Cookie,防止 CSRF 攻击
查看>>
nginx+tomcat+redis完成session共享
查看>>
iOS开发拓展篇—UIDynamic(捕捉行为)
查看>>
Eclipse 编译java文件后出错 左树无红叉
查看>>
Laravel Debugbar
查看>>
CentOS系统程序包管理器【rpm、yum】
查看>>
谷歌浏览器跨域问题,命名行解决
查看>>
MyEclipse生成WAR包并在Tomcat下部署发布(转发)
查看>>
后台管理UI皮肤的选择
查看>>
inline-block 左边固定,右边自适应
查看>>
ubuntu 环境变量PATH的修改
查看>>
动态代理模式
查看>>
进度条,随机数---demo笔记【原创】
查看>>
Android -- 自定义View小Demo,绘制钟表时间(一)
查看>>
Download Free Oracle Reports Building Guide eBook
查看>>
固定标题列、标题头table
查看>>
Geeks - Check whether a given graph is Bipartite or not 二分图检查
查看>>
使用Ant构建简单项目
查看>>