mirror of https://github.com/qianguyihao/Web.git
add: util.promisify()
This commit is contained in:
parent
fececc2c2f
commit
a9d941ccfb
|
|
@ -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.js:FS文件读写、数据库操作。
|
||||
- 3、ES6 中的 Promise、Generator、async/await
|
||||
|
||||
现在的大部分软件项目,都是前后端分离的。后端生成接口,前端请求接口。前端发送 ajax 请求,向后端请求数据,然后**等待一段时间**后,才能拿到数据。这个请求过程就是异步任务。
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 小结
|
||||
|
|
|
|||
Loading…
Reference in New Issue