博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用async控制执行顺序
阅读量:2058 次
发布时间:2019-04-29

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

使用eachSeries顺序执行

nodejs默认是异步执行的,所以很多地方迭代时不能保证顺序,如果有需要严格保证执行顺序的需求,可以使用async包提供的eachSeries函数来实现。

Example

下面是一段简单的读取文件的示例代码

console.log('异步执行')for (var i = 1; i < 8; i++) {
fs.readFile(`./doc/${
i}.txt`, 'utf8', (err, data) => {
if (err) {
console.error(err) return } console.log(data) })}

由于readFile是异步操作,所以执行结果并不能保证1-7顺序执行

使用async.eachSeries改造后有如下代码,这样就可以保证1-7始终顺序执行

import async from 'async'console.log('eachSeries顺序执行')let docs = [1, 2, 3, 4, 5, 6, 7]// async.eachSeries(arr, iterator callback, error callback)async.eachSeries(docs, (doc, callback) => {
fs.readFile(`./doc/${
doc}.txt`, 'utf8', (err, data) => {
if (err) {
// 如果有异常,则调用callback并传入err,在后面的error callback函数中进行处理 callback(err) return } console.log(data) // 若正常执行完毕,则调用callback变更信号量,async会继续执行下一个任务,若不调用则不会继续执行 // 只要callback()的参数不为空,均会视为执行异常,不会继续执行 callback() })}, (err) => {
if (err) {
console.error(err) }})

其它流程控制暂未涉及到,后续涉及到再做总结

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

你可能感兴趣的文章
借船过河:一个据说能看穿你的人性和欲望的心理测试
查看>>
AndroidStudio 导入三方库使用
查看>>
Ubuntu解决gcc编译报错/usr/bin/ld: cannot find -lstdc++
查看>>
解决Ubuntu14.04 - 16.10版本 cheese摄像头灯亮却黑屏问题
查看>>
解决Ubuntu 64bit下使用交叉编译链提示error while loading shared libraries: libz.so.1
查看>>
MFC程序添加console窗口+printf打印输出信息
查看>>
VS生成DLL文件供第三方调用
查看>>
Android Studio color和font设置
查看>>
Python 格式化打印json数据(展开状态)
查看>>
Centos7 安装curl(openssl)和libxml2
查看>>
Centos7 离线安装RabbitMQ,并配置集群
查看>>
Centos7 or Other Linux RPM包查询下载
查看>>
运行springboot项目出现:Type javax.xml.bind.JAXBContext not present
查看>>
Java中多线程向mysql插入同一条数据冲突问题
查看>>
Idea Maven项目使用jar包,添加到本地库使用
查看>>
FastDFS集群架构配置搭建(转载)
查看>>
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>
目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
查看>>