本文共 1079 字,大约阅读时间需要 3 分钟。
nodejs默认是异步执行的,所以很多地方迭代时不能保证顺序,如果有需要严格保证执行顺序的需求,可以使用async包提供的eachSeries函数来实现。
下面是一段简单的读取文件的示例代码
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/