node.js中fs读取文件模块与第三方then-fs读取文件模块的区别

1. node.js官方模块fs

node.js 官方提供的 fs 模块的使用:

查看代码
import fs from 'fs'

fs.readFile('./files/1.txt', 'utf8').(err,result) => {
    if (err){
        console.log(err)
    } console.log(result)
}

2. 第三方包 then.fs(含利用.then解决回调地狱问题)

      但是,node.js 官方提供的 fs 模块仅支持回调函数的方式读取文件,不支持 Promise 的调用方式。因此,安装 then-fs 这个第三方包,才能支持基于 Promise 的方式读取文件的内容。

安装第三方包then-fs:npm i then-fs

查看代码
import thenFs from 'then-fs'

thenFs.readFile('./files/1.txt', 'utf8')
.then( result => {console.log( result )},
         err => {console.log( err )}
      )
-------------------------
// .then()方法中返回的也是一个 promise 对象,那么可以继续使用 .then() 处理
// 这种通过 .then() 方法的链式调用,可以解决回调地狱问题
import thenFs from 'then-fs'
thenFs.readFile('./files/11.txt', 'utf8')
  .then((r1) => {
    console.log(r1)
    return thenFs.readFile('./files/2.txt', 'utf8') // 返回一个新的 promise 对象
  })
  .then((r2) => {
    console.log(r2)
    return thenFs.readFile('./files/3.txt', 'utf8')  // 继续返回一个新的 promise 对象
  })
  .then((r3) => {
    console.log(r3)
  })

      另外,在 Promise 的链式操作中如果发生了错误,可以使用 Promise.prototype.catch 方法进行捕获和处理,例如:

查看代码
import thenFs from 'then-fs'

thenFs
  .readFile('./files/11.txt', 'utf8')
// 可以提前捕获错误,就算上面发生错误,下面代码依然可以执行
// 否则,上面发生错误,马上不继续执行下面代码
  .catch((err) => {
    console.log(err.message)
  })
  .then((result1) => {
    console.log(result1)
    return thenFs.readFile('./files/2.txt', 'utf8')
  })
  .then((result2) => {
    console.log(result2)
    return thenFs.readFile('./files/3.txt', 'utf8')
  })
  .then((result3) => {
    console.log(result3)
  })
posted @ 2022-04-16 16:47  RHCHIK  阅读(571)  评论(0编辑  收藏  举报