zoukankan      html  css  js  c++  java
  • Nodejs中async/await以及Promise的使用

    场景:上传图片

    注意:try/catch是不能catch住Promise异步异常的

    其它:Nest.js中上传图片和裁剪

    async uploadAction (req, res) {
    
      try {
       // 同步调用
       await saveFileWithStream(filePath, fileData); // 这里的fileData是Buffer类型
      } catch (err) {
       console.log(err.stack);
      }
    
    }
    
    
    /**
     * 使用Promise封装createWriteStream异步事件处理
     * @param {String} filePath [文件路径]
     * @param {Buffer} readData [Buffer 数据]
     */
    static saveFile(filePath, fileData) {
    
      return new Promise((resolve, reject) => {
    
      if (!fs.existsSync(filePath)) {
       fs.mkdirSync(filePath);
      }
    
      // 块方式写入文件
      const wstream = fs.createWriteStream(filePath);
     
      wstream.on('open', () => {
       const blockSize = 128;
       const nbBlocks = Math.ceil(fileData.length / (blockSize));
       for (let i = 0; i < nbBlocks; i += 1) {
        const currentBlock = fileData.slice(
         blockSize * i,
         Math.min(blockSize * (i + 1), fileData.length),
        );
        wstream.write(currentBlock);
       }
     
       wstream.end();
      });
      wstream.on('error', (err) => { reject(err); });
      wstream.on('finish', () => { resolve(true); });
     });
    }
    

    简化示例版

    const requestFunc = async () => {
        let r = null
        try {
          r = await function_async()
        } catch (e) {
          console.error(e.message)
        }
        return r
    }
     
    return await requestFunc()
    

    nodejs文件写入操作

     
    const fs=require('fs');
    const path=require('path');
    let writeStream=fs.createWriteStream('./test/b.js',{encoding:'utf8'});
     
     
    //读取文件发生错误事件
    writeStream.on('error', (err) => {
        console.log('发生异常:', err);
    });
    //已打开要写入的文件事件
    writeStream.on('open', (fd) => {
        console.log('文件已打开:', fd);
    });
    //文件已经就写入完成事件
    writeStream.on('finish', () => {
        console.log('写入已完成..');
        console.log('读取文件内容:', fs.readFileSync('./test/b.js', 'utf8')); //打印写入的内容
        console.log(writeStream);
    });
     
    //文件关闭事件
    writeStream.on('close', () => {
        console.log('文件已关闭!');
    });
     
    writeStream.write('这是我要做的测试内容');
    writeStream.end();
     
     
     
    

      

  • 相关阅读:
    java读写文本文件
    django学习<二>:连接数据库
    【MongoDB】递归获取字段更新表达式,更新复杂数据类型对象
    【MongoDB】C#中的Mongo数据类型转换
    【MongoDB】 基于C#官方驱动2.2版的封装类
    【Python】 属性的 get 与 set 方法
    【基础知识】UML基础
    【C#】 知乎用户网络爬虫
    【C#】MVC项目中搭建WebSocket服务器
    【MongoDB】 Windows 安装
  • 原文地址:https://www.cnblogs.com/terrylin/p/12454269.html
Copyright © 2011-2022 走看看