关于node.js的异步心得

最近刚刚学了node.js 异步篇

先说一下异步的处理流程 下面用代码解释一下

我们从创建一个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)

        })
    })
})

这种如果有很多个 就不切实用了 代码量大 不容易维护

第二种 使用Promise

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

第三种还有可以使用async函数和await关键字cnst fn =async()=>{}

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}`
}
发布了3 篇原创文章 · 获赞 13 · 访问量 1081

猜你喜欢

转载自blog.csdn.net/qq_43541326/article/details/104804930