01 fs模块

1 fs.readFile

异步执行函数

/**
 fs 读取文件相对路径是相对终端命令行所在的路径
process.cwd()返回终端命令行的绝对路径
 * 
 */

fs = require('fs')
fs.readFile('./static/1.txt', (err, data) => {
  if (err) {
    console.log(err.message);
    return
  }
  console.log(data); //二进制
  console.log(data.toString()); //二进制转字符串
})
// 如果指定了编码格式,data就直接是字符串 ./可以省略'static/test/test.js'=='./static/test/test.js'
fs.readFile('static/test/test.js', 'utf8', (err, data) => {
  if (err) return
  console.log(data);
})
// 要求:在第一个异步任务读取成功之后再读取第二个异步任务, 第二成功后,在读取第三个异步任务

const fs = require('fs');

fs.readFile('./static/1.txt', (err, data) => {
  if (err) throw err
  console.log(data.toString());
  fs.readFile('./static/2.txt', (err, data) => {
    if (err) throw err
    console.log(data.toString());
    fs.readFile('./static/3.txt', (err, data) => {
      if (err) throw err
      console.log(data.toString());
    })
  })
})

promise 管理下

new Promise((resolve, reject) => {
  fs.readFile('./static/1.txt', (err, data) => {
    if (err) reject(err)
    else resolve(data)
  })
}).then(data => {
  console.log(data.toString());
  return new Promise((resolve, reject) => {
    fs.readFile('./static/2.txt', (err, data) => {
      err ? reject(err) : resolve(data)

    })
  })
}).then(data => {
  console.log(data.toString());
  return new Promise((resolve, reject) => {
    fs.readFile('./static/3.txt', (err, data) => {
      err ? reject(err) : resolve(data)
    })

  })
}).then(data => console.log(data.toString())).catch(err => console.log(err.message))

封装读取promise的fs.readFile

function getFileByPath(path) {
  return new Promise((resolve, reject) => {
    fs.readFile(path, (err, data) => {
      err ? reject(err) : resolve(data)
    })
  })
}

getFileByPath('./static/1.txt').then(data => {
  console.log(data.toString());
  return getFileByPath('./static/2.txt')
}).then(data => {
  console.log(data.toString());
  return getFileByPath('./static/3.txt')

}).then(data => console.log(data.toString())).catch(err => console.log(err))
//Promise.all([promise1,promise2,...])返回一个新的promise对象,只有都成功才执行then 返回数据也是一个数组 ,只要其中有一个失败,就直接走了catch
//适合页面发起多个ajax请求
const promise1 = getFileByPath('./static/1.txt')
const promise2 = getFileByPath('./static/2.txt')
const promise3 = getFileByPath('./static/3.txt')

Promise.all([promise1, promise2, promise3]).then(data => console.log(data)).catch(err => console.log(err.message))
async function fn() {
  const data1 = await promise1
  const data2 = await promise2
  const data3 = await promise3
  return [data1.toString(), data2.toString(), data3.toString()]
}
fn().then(data => console.log(data)).catch(err => err)
原文地址:https://www.cnblogs.com/xiaoliziaaa/p/13299332.html