zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    搭建LNAMP环境(四)- 源码安装PHP7
    搭建LNAMP环境(三)- 源码安装Apache2.4
    搭建LNAMP环境(二)- 源码安装Nginx1.10
    搭建LNAMP环境(一)- 源码安装MySQL5.6
    Yii2框架RESTful API教程(二)
    Yii2框架RESTful API教程(一)
    PHP实现RESTful风格的API实例(三)
    centos7部署elk集群(filebeat+kafka+logstash+elasticsearch+kibana)
    centos7部署kafka+zookeeper集群
    ElasticSearch7.5.2通过模板管理索引副本数、分片
  • 原文地址:https://www.cnblogs.com/xiaoliziaaa/p/13299332.html
Copyright © 2011-2022 走看看