nodeJS中对Promise模块介绍

2023-05-16

1、Promise 简介

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

Promise对象有以下两个特点。

(1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

30.2、Promise 的基本使用

新建的Promise就是一个容器,里面可以存放异步操作,也可以存放同步操作


const fs = require("fs");
const path = require("path");
​
let filePath = path.join(__dirname, "files", "3.txt");
​
// 异步操作可能成功或者失败
// 第一个形参resolve , 成功的时候执行的函数
// 第二个形参reject , 失败的时候执行的函数
let p1 = new Promise((resolve, reject)=>{
    //1、同步代码
    console.log("同步代码");
​
    // pending(进行中)、fulfilled(已成功)和rejected(已失败)
    //2、异步代码
    fs.readFile(filePath,"utf-8",(error1, data1)=>{
        if(error1){
            //失败的时候做的事情
            reject(error1);    // 调用后面p1.then的第二个函数
        }
        //读取完之后做的事情
        resolve(data1);    // 调用后面p1.then的第二个函数
    })
});
​
p1.then((data1)=>{
    console.log("读取成功", data1);
},(error1)=>{
    console.log("读取失败", error1);
});  

30.3、Promise的then链式调用的特点

链式调用的特点: 1、第一个then执行完会执行第二个then 2、then里面的函数的返回值,会被下一个then的形参接收 3、如果返回的是一个promise对象,下一个then的形参接收到的不是这个promise对象,而是这个promise对象内部调用resolve时候的实际参数


const fs = require("fs");
const path = require("path");
​
let filePath = path.join(__dirname, "files", "3.txt");
​
// 新建的Promise就是一个容器,里面可以存放异步操作,也可以存放同步操作
​
// 异步操作可能成功或者失败
// 第一个形参resolve , 成功的时候执行的函数
// 第二个形参reject , 失败的时候执行的函数
let p1 = new Promise((resolve, reject)=>{
    //1、同步代码
    // console.log("同步代码");
​
    // pending(进行中)、fulfilled(已成功)和rejected(已失败)
    //2、异步代码
    fs.readFile(filePath,"utf-8",(error1, data1)=>{
        if(error1){
            //失败的时候做的事情
            reject(error1)
        }
        //读取完之后做的事情
        resolve("resolve的形参")
    })
});
​
//业内把promise then的写法被称为开火车开发
​
p1.then((data1)=>{
    return p1
},(error1)=>{
    console.log("读取失败", error1);
    return error1
}).then((data)=>{
    console.log(data);   // “resolve("resolve的形参")
});  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nodeJS中对Promise模块介绍 的相关文章

随机推荐

  • 使用pt-query-digest分析mysql

    最近在看 高性能MySQL xff0c 作者们背靠Percona向我展示了以前从不知道的一些关于MySQL的知识以及各种分析优化工具 xff0c 比如这里要说的pt query digest 什么是pt query digest pt qu
  • node.js对es6语法学习

    1 es6模板字符串的使用 xff08 模板语法 xff09 console log 96 obj newname 是 obj name 的另外一个名字 xff0c 还有就是她今年18岁啦 96 es6 提供一个语法表示一个字符串 xff0
  • ES6中的箭头函数

    1 箭头函数 ES6 允许使用 箭头 xff08 61 gt xff09 简化函数的定义 注意点 xff1a 1 形参个数如果为1个 xff0c 可以省略小括号不写 2 如果函数体里面只有一个语句 xff0c 可以省略大括号不写 并且他会默
  • ES6this指向丢失问题+利用class类创建对象

    1 在dom操作中使用箭头函数可以规避this指向丢失问题 lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 g
  • nodeJS继承中的子类constructor的写法+静态属性和静态方法+nodejs中的全局对象

    1 继承中的子类constructor的写法 xff1a 在ES6中使用继承时 xff0c constructor中必须调用super 方法 其本质是在调用父类的constructor方法 通过这样的方式来达到属性继承的效果 xff0c 解
  • ES6中process对象

    process对象 了解 console log process argv 返回一个数组 xff0c 前两个值是 node 命令所在位置 xff0c 被执行 JS 文件的路径 xff0c 若你执行命令时还有带有参数 xff0c 依次会填充到
  • nodeJS模块化开发

    1 模块的使用 1 1 为什么要模块化 了解 在计算机程序的开发过程中 xff0c 随着程序代码越写越多 xff0c 在一个文件里代码就会越来越长 xff0c 越来越不容易维护 为了编写可维护的代码 xff0c 我们把很多函数分组 xff0
  • nodejs中Buffer数据类型

    一 Buffer数据类型 JavaScript 语言自身只有字符串数据类型 xff0c 没有二进制数据类型 但在处理像文件流时 xff08 文件读写操作 xff09 xff0c 必须使用到二进制数据 因此在 Node js 中 xff0c
  • nodejs中fs文件系统内置模块

    一 fs文件系统模块 Node js 的 API 内置有两个模块 xff1a path 和 fs xff0c 我们使用 JavaScript 代码编写程序运行在 Node js 环境中就可以操作文件 1 1 同步读取文件信息 同步读取 xf
  • nodeJS中回调地域案例(Callback Hell)

    nodeJS中回调地域案例思考题 需求 xff1a 现在存在三个文件 1 txt 2 txt 3 txt 每个文件里面有一个字符 使用 xff1a fs readFile 异步 顺序读取 1 txt 2 txt 3 txt 里面的内容 xf
  • nodejs中对IP地址和端口的区分(基础了解)

    IP地址和端口的区分 ip地址 xff1a 标识网络上不同的设备 xff08 可连接网络的设备 xff08 电脑 手表 冰箱 智能设备等等 xff09 xff09 端口号 xff1a 标识同一台设备上的不同的网络进程 xff08 网络进程指
  • linux常用命令

    具体看自己的存放路径 重启Nginx usr local nginx sbin nginx s reload 重启PHP service php fpm restart linux查看目录下各个文件大小的命令 xff1a du h max
  • nodejs中http内置模块使用

    一 http模块 服务器获取数据原理 xff1a 前置知识点 xff1a IP地址 端口 http请求大致过程 先做粗略了解 xff0c 后面细讲 1 1 http核心模块的使用 四个步骤 xff1a 1 导入http模块 2 定义服务器程
  • nodeJS中npm简介与使用方法

    一 npm简介 npm 全称为 Node Package Manager xff0c 是一个基于 Node js 的包管理器 xff0c 也是整个 Node js 社区最流行 支持的第三方模块最多的包管理器 npm的初衷 xff1a Jav
  • nodeJS中利用第三方内置模块实现数字转大写功能

    一 案例制作 实现一个 xff0c 数字转大写的功能 如 xff1a 123 转 壹佰贰拾叁 在 nzh npm npmjs com 上查询npm文档引入第三方模块 找对应可能用上的包 xff0c 参考文档 xff0c 进行安装 xff0c
  • nodeJS编译环境下使用yarn工具的安装与使用方法

    一 yarn安装与使用 Yarn 是于 2016 年 10 月 由 Facebook Google Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具 xff0c 旨在取代 npm 这种包管理工具 官网 xff1a Do
  • nodejs不支持ES6模块化规范的解决方案

    一 nodejs不支持ES6模块化规范的解决方案 在项目目录下新建src文件夹 xff0c src文件夹下新建m1 js模块和app js模块 xff1a m1 js模块中到处数据 xff1a export let name 61 34 n
  • yarn /nmp全局安装后,命令不生效

    yarn 全局安装后 xff0c 命令不生效 解决方法如下文章 nmp全局安装后 xff0c 命令不生效 xff08 通过链接查询解决办法 16条消息 安装Babel提示babel 不是内部或外部命令 xff0c 也不是可运行的程序 或批处
  • nodeJS中使用promise实现文件读取、写入的案例

    31 使用promise实现之前文件读取的案例 在引用util模块采用 xff1a 遵循常见的错误优先的回调风格的函数 xff08 也就是将 err value 61 gt 回调作为最后一个参数 xff09 xff0c 并返回一个返回 pr
  • nodeJS中对Promise模块介绍

    1 Promise 简介 Promise 是异步编程的一种解决方案 xff0c 比传统的解决方案 回调函数和事件 更合理和更强大 它由社区最早提出和实现 xff0c ES6 将其写进了语言标准 xff0c 统一了用法 xff0c 原生提供了