add: util.promisify()

This commit is contained in:
qianguyihao 2023-06-24 11:21:25 +08:00
parent fececc2c2f
commit a9d941ccfb
2 changed files with 29 additions and 8 deletions

View File

@ -40,11 +40,11 @@ JS代码在执行时有它的运行环境也称之为“容器”这个
### 定义
如果当前正在执行的任务执行完成前,它就会**阻塞**其他正在排队的任务。为了解决这个问题JS 在设计之初,将任务分成了两类:同步任务、异步任务。
当前正在执行的任务,如果没有执行完成,它可能会**阻塞**其他正在排队的任务。为了解决这个问题JS 在设计之初,将任务分成了两类:同步任务、异步任务。
- 同步任务:在**主线程**上排队执行的任务。只有前一个任务执行完毕,才能执行下一个任务。
- 同步任务:在**主线程**上排队执行的任务。只有前任务执行完毕,才能执行下一个任务。当前任务在没有得到结果之前,不会继续后续操作。
- 异步任务:不进入主线程、而是进入**任务队列**Event Queue的任务该任务不会阻塞后面的任务执行。只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。
- 异步任务:不进入主线程、而是进入**任务队列**Event Queue的任务该任务无论有没有得到结果,都不会阻塞后续任务的执行。只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。
代码举例:
@ -78,7 +78,7 @@ console.log('同步任务2');
- 2、回调函数
- 2.1、定时器setTimeout定时炸弹、setInterval循环执行
- 2.2、ajax请求。
- 2.3、Node.js 中的一些方法回调。
- 2.3、Node.jsFS文件读写、数据库操作。
- 3、ES6 中的 Promise、Generator、async/await
现在的大部分软件项目,都是前后端分离的。后端生成接口,前端请求接口。前端发送 ajax 请求,向后端请求数据,然后**等待一段时间**后,才能拿到数据。这个请求过程就是异步任务。

View File

@ -13,15 +13,15 @@ title: 06-Promise入门详解
## Promise 的介绍和优点(为什么需要 Promise
Promise 是异步编程的一种解决方案和规范。ES6将其写进了语言标准统一了用法原生提供了Promise对象。
Promise 是异步编程的一种**新的解决方案和规范**。ES6将其写进了语言标准统一了用法原生提供了Promise对象。
Promise 对象, 可以**用同步的表现形式来书写异步代码**(也就是说,代码看起来是同步的,但本质上的运行过程是异步的)。使用 Promise 主要有以下优点:
- 1、可以很好地解决**回调地狱**的问题(避免了层层嵌套的回调函数)。
- 1、可以很好地解决ES5中的**回调地狱**的问题(避免了层层嵌套的回调函数)。
- 2、统一规范、语法简洁、可读性和和可维护性强。
- 3、Promise 对象提供了简洁的 API使得管理异步任务更方便、更灵活。
从语法上讲Promise 是一个对象,它可以获取异步操作的消息
从语法上讲Promise 是一个构造函数。从功能上来说Promise 对象用于封装一个异步操作,并获取其成功/ 失败的结果值
从写法规范上讲,**Promise 本质上是处理异步任务的一种编写规范**要求每个人都按照这种规范来写。异步任务成功了该怎么写、异步任务失败了该怎么写、成功或者失败之后怎么通知调用者这些都有规定的写法。Promise 的目的就是要让每个使用ES6的人都遵守这种写法规范。
@ -195,7 +195,7 @@ promise.then(onFulfilled).catch(onRejected);
Promise是一个类通过 `new Promise()` 进行**实例化**,构造出一个 Promise 实例对象。
1、Promise 的构造函数中需要传入一个参数,这个参数是一个回调函数,常用于处理异步任务。这个函数有一个专有名词叫 **executor**(执行器),因为在 `new Promise()` 时,这个函数会**立即执行**。
1、Promise 的构造函数中需要传入一个参数,这个参数是一个回调函数,常用于处理异步任务。这个回调函数有一个专有名词叫 **executor**(执行器),因为在 `new Promise()` 时,这个函数会**立即执行**。
可以在该回调函数中传入两个参数resolve 和 reject。我们可以在适当的时机执行 resolve()、reject(),用于改变当前 Promise 实例的状态到**成功**或**失败**。
@ -657,6 +657,27 @@ qianguyihao then
{"name":"qianguyihao"}
```
## Node.js 中的util.promisify()方法
Node.js 中有一个内置的方法 util.promisify(),它可以很方便地将 ES5回调函数写法的方法转成Promise写法的方法。就不需要我们手动封装Promise了。
代码举例:
```js
// 引入 util 模块
const util = require('util');
// 引入 fs 模块
const fs = require('fs');
// 返回一个新的函数,这个函数是一个 Promise 对象
const readFilePromise = util.promisify(fs.readFile);
readFilePromise('readme.txt').then(res => {
console.log('res:', res.toString());
});
```
## 小结