最近刚刚学了node.js 异步篇
先说一下异步的处理流程 下面用代码解释一下
我们知道了 先处理了第一个打印 处理了最后一个打印 而读取文件 是最后才输出来的
使用回调 得到的结果
因为我们想得到顺序的输出 就得需要下面的知识咯
解决方法:
案例 我们依次输出三个文本内容
const fs = require('fs')
const path = require('path')
let f_a = path.join(__dirname, "file", "a.txt")
let f_b = path.join(__dirname, "file", "b.txt")
let f_c = path.join(__dirname, "file", "c.txt")
fs.readFile(f_a, 'utf8', (err, data) => {
if (err) throw err
console.log(data)
fs.readFile(f_b, 'utf8', (err, data) => {
console.log(data)
fs.readFile(f_c, 'utf8', (err, data) => {
console.log(data)
})
})
})
这种如果有很多个 就不切实用了 代码量大 不容易维护
const fs = require('fs') //引入fs模块
const path = require('path') //引入path
let f_a = path.join(__dirname, 'file', 'a.txt') //获取绝对路径
let f_b = path.join(__dirname, 'file', 'b.txt')
let f_c = path.join(__dirname, 'file', 'c.txt')
function readFile(path) {
return new Promise((resolve, reject) => { //使用promise处理异步
fs.readFile(path, 'utf8', (err, data) => {
resolve(data)
})
})
}
let p1 = readFile(f_a) //调用函数
p1.then(data => {
console.log(data)
return readFile(f_b)
}).then(data => {
console.log(data)
return readFile(f_c)
}).then(data => {
console.log(data)
})
这种就比较方便了 直接使用then方法就ok
const fs = require('fs')
const readFile = (fileName, encoding) => {
return new Promise((resolve, reject) => {
fs.readFile('a.txt', 'utf8', function(err, data){
if (err) return reject(err)
resolve(data)
})
})
}
async function readABC(encoding = 'utf8') {
const contenta = await readFile('a.txt', encoding)
const contentb = await readFile('b.txt', encoding)
const contentc = await readFile('c.txt', encoding)
return `${contenta}${contentb}${contentc}`
}