19 # promisify:将回调方法 promise 化

news2025/1/16 13:56:06

之前写个单独的方法去处理文件读取

function read(filename) {
    return new Promise((resolve, reject) => {
        fs.readFile(filename, "utf-8", function (err, data) {
            if (err) reject(err);
            resolve(data);
        });
    });
}

将 node 的 api 快速的转化成 promise 的形式

const fs = require("fs").promises;
fs.readFile("./file/age.txt", "utf-8").then((data) => {
    console.log("data---->", data);
});

这里使用 promises,fs.readFile 返回的是一个 promise

在这里插入图片描述

在这里插入图片描述

或者可以使用 node 的 util 工具里的 promisify 方法将回调方法 promise 化

const fs = require("fs");
const util = require("util");

let read = util.promisify(fs.readFile);

read("./file/name.txt", "utf-8").then((data) => {
    console.log("data---->", data);
});

在这里插入图片描述

实现一个 promisify 转换 node api 的方法

// 这里可以简写去掉return,(fn) => (...args) => new Promise,我这里就保留方便理解
const promisify = (fn) => {
    return (...args) => {
        return new Promise((resolve, reject) => {
            fn(...args, function (err, data) {
                if (err) reject(err);
                resolve(data);
            });
        });
    };
};

测试

const fs = require("fs");

let read = promisify(fs.readFile);

read("./file/name.txt", "utf-8").then((data) => {
    console.log("data---->", data);
});

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/557382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux基于Apache服务搭建简易镜像站

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Linux基于Apache服务搭建简易镜像站 安装Apache服务器 yum install -y httpd.x86_64 配置Apache服务器:编辑Apache配置文件/etc/httpd/conf/httpd.conf #S…

深度学习 - 50.推荐场景下的 Attention And Multi-Head Attention

目录 一.引言 二.Attention 1.Common Attention 2.Google Attention 三.Multi-Head Attention 四.总结 一.引言 Attention 注意力机制最早来源于我们自身的视觉感官,当我们视觉获取到图像信息时,我们并不是从前往后从上往下均匀的扫描画面&#x…

如何用FinalShell连接VirtualBoxLinux虚拟机?

本章教程,主要介绍一下如何用FinalShell连接VirtualBoxLinux虚拟机。 当安装完虚拟机的时候,你可能会遇到找不到ifconfig命令。这个是因为当时安装过程中,我们选择的是最小化安装,所以有些命令是需要按需进行安装的。 目录 1、li…

JavaScript:原型、原型链、继承

一、理解原型 1.1、人工智能解释 JavaScript中的原型是一种机制,它允许在创建对象时共享属性和方法。每个JavaScript对象都有一个原型对象,它包含一些公共属性和方法,可以被该对象和其他对象共享。 当你创建一个对象时,Javascr…

案例13:Java社区帮扶对象管理系统设计与实现开题报告

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

HTML+CSS实训——Day01——安装好环境+写一个简单的应用启动页面

前言 学校最近开始实训周了,一上就是一个月,本来想在课上学点考研的东西的,但是无奈任务重,而且最后还能有点小奖励,就认真学了,再者说,html也挺重要的,学一学也不算浪费时间。 软…

【JUC】Synchronized与锁升级

【JUC】Synchronized与锁升级 文章目录 【JUC】Synchronized与锁升级1. 概述1.1 无锁1.2 偏向锁 1. 概述 用锁能够实现数据的安全性,但是会带来性能下降。无锁能够基于线程并行提升程序性能,但是会带来安全性下降。如何达到两者的平衡呢? s…

VuePress V1 踩坑记录

文章目录 前言1.Node.js 版本问题2.侧边栏3.添加页面目录导航4.非首页 footer 不生效5.部署到 Github 的错误vuepress 的 docs 与 Github Pages 的 docs 目录冲突样式丢失 7.资源引用问题本地图片找不到引用 CSDN 图片报 403 错误 参考文献 前言 我的第二本开源电子书《后台开…

Raft集群变更:This article is all your need

Background 为了变化raft集群,我们可以选择:.停在旧配置,然后再上线新配置 。但是这个会导致整个集群变得不可用,同时手动修改也会到来问题。 所以我们采用热变更 这也导致了安全性的问题,变更过程有可能导致两个le…

miniconda安装+pycharm安装

miniconda安装pycharm安装 1.miniconda安装2.pycharm安装3.pycharm环境配置 1.miniconda安装 miniconda下载路径:https://docs.conda.io/en/latest/miniconda.html 打开后选择对应的电脑系统及python版本下载 下载完成后双击运行 选择安装路径,记住安装…

SpringCloud Eureka 的详细讲解及示意图

目录 SpringCloud Eureka 服务注册与发现 Spring Cloud 组件选型- 图 当前项目架构问题分析-引出Eureka 一图胜千言 问题分析 引入Eureka 项目架构 解读上图 Eureka采用了 CS 的设计架构, 创建单机Eureka Server-注册中心 创建e-commerce-eureka-server-90…

【深度学习】- 作业3: CIFAR10图像分类

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…

【数据结构与算法】- 周测三

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…

【瑞萨RA_FSP】UART 编程实战

文章目录 一、UART收发回显二、UART指令控制RGB灯三、基于环形队列的UART收发回显 一、UART收发回显 UART只需两根信号线即可完成双向通信,对硬件要求低,使得很多模块都预留UART接口来实现与其他模块或者控制器进行数据传输, 比如GSM模块&am…

【Unity3D】反射和折射

1 前言 立方体纹理(Cubemap)和天空盒子(Skybox)中介绍了生成立方体纹理和制作天空盒子的方法,本文将使用立方体纹理进行采样,实现反射和折射效果。 立方体纹理采样原理:从世界坐标系的坐标原点出…

深入printf

目录 printf的定义 printf的使用 函数说明 说明符(specifier) flags(标志) width(最小宽度) .precision(精度) length(类型长度) 转义序列 printf的…

linux(软硬链接)

目录: 1.软连接 2.硬链接 ----------------------------------------------------------------------------------------------------------------------------- 1.软连接 linux当中有两个概念,一个是软连接,一个是硬链接,在学习…

Golang每日一练(leetDay0074) 词典类设计、单词搜索II

目录 211. 添加与搜索单词 - 数据结构设计 Design-add-and-search-words-data-structure 🌟🌟 212. 单词搜索 II Word Search ii 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golan…

基于C#和Blazor开发的前后端分离框架

Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。 开源地址 https://gitee.com/known/Known 开发环境 .NET 7VS2022 概述 基于C#和Blazor实现的快速开发框架,前后端分离…

【深度学习】- 作业4: 脑部MRI(核磁共振)图像分别

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…