由于js io 操作的异步特性,所以有很多的流程控制的方法,其中async的whilst主要是用于循环的流程控制,为什么会用到这个async.whilst呢?

有这样一个问题:

var i = 0;
while(i<100){func.doIo(function(){dosomething();// i++;})i++
}

假如你希望这个循环循环一百次,每一次执行一次里边的io操作,结果你会发现基本上你没办法用while实现这个操作。无论你是把i++放在io的回调里边还是放在外边,结果都并不是你想的那样。

这个时候就需要async.whilst.

看代码:

var async = require('async');var i = 0;
var j = 0;
async.whilst(function(){console.log('check'+i);return i<6;},function(whileCb){j=0;i++;console.log('while:'+i)async.whilst(function(){//console.log('check'+j);return j<5;},function(whileCb1){j++;console.log('whileCb1'+j);whileCb1();},function(err){console.log('second');whileCb(); // invoke when inner whilst done}) },function(err){console.log(err);})

这段代码内层的循环相当于一次io操作(注意:我这是要模拟IO操作,IO操作的特点是异步的,如果是纯粹的逻辑运算,就用while就可以实现),我们要实现的目标是外循环循环一次,里边循环5次。大家注意whileCb()所放的位置,这个位置的意思就是如果到达了条件才再次调用循环,可以仔细理解一下和while的区别。

async.whilst里边有3个function,第一个是循环条件,第二个是循环体,第三个是结束或者err时进入。所以用whilst可以控制有io的流程控制。

转载于:https://www.cnblogs.com/yangluping/p/6504904.html

nodejs async.whilst用法相关推荐

  1. Spring 异步@Async注解用法 Spring @Async注解用法总结 Spring @Async基本用法示例

    Spring 异步@Async注解用法 Spring @Async注解用法总结 Spring @Async基本用法示例 一.概述 在日常开发的工作中,经常会使用异步进行开发.Spring 提供一个简单 ...

  2. 前端异步编程之Promise和async的用法

    传统的异步解决方案采用回调函数和事件监听的方式,而这里主要记录两种异步编程的新方案: ES6的新语法Promise ES2017引入的async函数 Generator函数(略) Promise的含义 ...

  3. nodejs async await promise理解

    这篇文章是让大家更好理解 nodejs的async 和await 以及promise, 其实await状态虽然是在你需要的步骤里面是同步的,但是整个系统状态是异步的,是异步里面的同步,无需担心系统性能 ...

  4. C# async / await 用法

    目录 一.简介 二.异步等待返回结果 三.异步方法返回类型 四.await foreach 五.Task.Delay 结束 一.简介 await 运算符暂停对其所属的 async 方法的求值,直到其操 ...

  5. async/await用法详解

    ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async函数的定义方式 // 函数声明 async function fn() {}// 函数表达式 const fn = a ...

  6. 前后端交互(Promise、fetch、axios、async/awit用法)

    1.Promise概述 Promise是异步编程的一种解决方案,从语法上讲,Promise是一个对象,从它可以获取异步操作的消息. 1.2Promise的好处: 1.2.1. 可以避免多层异步调用嵌套 ...

  7. python3 异步 async with 用法

    异步上下文管理器"async with" 异步上下文管理器指的是在enter和exit方法处能够暂停执行的上下文管理器. 为了实现这样的功能,需要加入两个新的方法:__aenter ...

  8. nodejs async

    强烈推荐 https://www.npmjs.org/package/async 来自为知笔记(Wiz) 转载于:https://www.cnblogs.com/caoyang/p/aac1c4feb ...

  9. javascript中的异步调用,promise对象,async/await用法

    原生javascript中的的回调函数 即callback 就是通过回调函数来通知主程序 对于io 密集的非常好用:eg. file,DB读写,网络访问 异步: javascript就是个单线程语言, ...

  10. Python中的async with用法

    原文出处:<async with和async for> 网上async with和async for的中文资料比较少,我把PEP 492中的官方陈述翻译一下. 异步上下文管理器" ...

最新文章

  1. linux 系统中断信息,关于操作系统:中断处理(Linux /常规)
  2. POJ 3275 Ranking the Cows (floyd传递闭包)
  3. 服务器ghost到虚拟机,无需U盘用Ghost还原vmware内虚拟机系统的方法
  4. 【Python】7种方案,彻底实现可视化图片大小/分辨率控制自由
  5. 富士施乐3065扫描教程_全面支持IT国产化 富士施乐70款机型获统信UOS兼容认证
  6. 【WebRTC---进阶篇】(四)mediasoup服务器的布署与使用
  7. MATLAB库函数unwrap(相位解卷绕)的C语言实现
  8. 狂赌智能手机 中国互联网巨头深陷零利润困局
  9. 如何在Debian 9上配置sources.list
  10. php 新建 mysql用户_php为什么选mysql作为数据库? Mysql 创建用户方法
  11. 解压后缀.tar.gz的软件包
  12. 吴恩达神经网络和深度学习-学习笔记-2-激活函数
  13. 软考软件设计师中java题_计算机基础试题整理与解析-软考中级软件设计师
  14. matlab中邮递员问题实例,中国邮递员问题的求解实例.doc
  15. 项目管理工具project软件学习(二) - 自定义日历【标准+节假日】
  16. 走进CIM,开启智慧城市的全生命周期管理
  17. 海德也离开了,祝你一路顺风。
  18. 傅里叶入门--动手演示波形叠加
  19. 用IDEA弹奏《起风了》伴奏音乐 Java语言 <源码分享> GitHub有趣的小项目
  20. VM虚拟机中的web服务内网穿透的设置,虚拟机连接主机的mysql(主机win10 虚拟机win10)

热门文章

  1. 剑网三插件入门教程(2):在游戏中调试Lua代码
  2. 按键1按下数码管显示1,按键2按下数码管显示2,按键3按下8个LED灯实现流水灯效果;
  3. 使用Andriod Device Moniter时用正则表达式筛选指定日志
  4. laravel 实现队列功能
  5. 二等水准数据平差_二等水准测量方法与步骤
  6. SHON WEBB:坚持做这四件事,会让你的自律达到新的高度
  7. Druid【部署 01】最新版本的(安装+启动服务+打开控制台+本地文件数据载入+数据查询)及(小内存服务器启动JVM参数调整)一次学会使用Druid的完整流程(已完成)
  8. Scratch编程与游戏:大鱼吃小鱼!
  9. [网络性能测试学习笔记] 测试AX3 Pro WiFi6无线路由器的系统转发能力(硬件转发交换能力L23吞吐量,L47应用层能力-最大可支持设备用户数,并发连接数等)
  10. android 地图侧滑栏,Android封装侧滑菜单栏