一、promise含义
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。
所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。
二、promise方法
方法 | 类型 | 简介 |
then() | 原型方法 | 可以处理thenable和catchable |
catch() | 原型方法 | 可以处理catchable |
finally() | 原型方法 | 用于不管promise最后状态如何,都会执行finally方法 |
resolve() | 静态方法 | 常见promise成功的实例 |
all() | 静态方法 | 返回一个promise对象,当数组里面的所有promise对象的状态都为resolve,者新的promise对象的状态为resolve,反之有一个rejected状态,则新的promise对象的状态为resolve |
三:promise的处理同步与异步之间的问题
将程序分为三种状态 pending resolved rejected。
pending 等待 处于unsettled阶段,表示事情还在等待最终的结果。
resolved 已处理 处于setteled阶段,表示事情已经出现结果,并且可以按照正常的逻辑进行下去的结果。
rejected 已拒绝 处于setteled阶段,表示事情已经出现结果,并且不可以按照正常的逻辑进行下去的结果。把事情从pending状态推向resolved状态的过程中,可能会传递一些数据,这些数据为真实有效数据。
把事情从pending状态推向rejected状态的过程中,可能会传递一些数据,这些数据为错误信息无论是在哪个阶段还是那个状态,都是不可逆。
当事情已经到达已决阶段后,通常用结果数据做一些后续处理,不同的已决结果,可能造成不同的后续处理。
resolved 后续处理表示为thenable
rejected 后续处理表示为catchable后续处理可能有多个,因此会形成任务队列,这些后续处理会按照顺序当到达对应的状态时会依次执行。
总之,Promise 是一种处理异步代码(而不会陷入回调地狱)的方式。
打印顺序
// 导入fs文件管理模块
const { rejects } = require('assert')//自动编写
const fs = require('fs')
const { resolve } = require('path')//自动编写
// 构建一个promiss对象(注意大小写)
const AG = new Promise((resolve, reject) => {
// 调用fs模块中的readFile方法,读取1.txt中的文本
fs.readFile('./1.txt', (err, data) => {
// 读取失败de情况
if (!err) {
// 调用resolve方法并传入读取的内容
resolve(data)
} else {
reject(err)
}
})
})
//promise对象都会有两个方法,一个叫then,一个叫catch
//当这个promise对象内部的resolve被调用,就会执行then里的代码
// 当这个promise对象内部的reject被调用,就会执行catch.里的代码,
AG
.then(res => {
console.log('then调用:' + res);
})
.catch(err => {
console.log('catch调用:' + err);
})
注:后续接着本节内容补充