promise简单理解分析
(一) 前置知识
- 回调函数:
- 同步回调
- 理解: 立即执行,完全执行完成之后才结束,不会放入回调队列中。
- 例子:数组遍历相关的回调函数/Promise的 excutor 函数。
- 异步回调
- 理解: 不会立即执行,会放入回调队列中,后续再执行。
- 例子:定时器回调/Ajax回调/promise的成功|失败的回调。
- 代码演示:
const arr = [1, 2, 3]
arr.forEach(item => console.log(item))
console.log('forEatch()之后')
setTimeout(() => {
console.log('timout 回调')
}, 0)
console.log('setTimeout 之后')
(二) Promise
- Promise的作用:Promise是JS异步编程的解决方案之一,以前通常实用回调。
- Promise是一个构造函数,Promise对象用来封装一个异步操作并且可以获得结果。
- Promise有两种状态:
- resolved代表成功
- rejected表示失败
- 注意:一个Promise对象只能改变一次,无论成功还是失败,都会有一个结果数据,成功的结果数据一般称为 value,失败的结果数据一般称为 reason。
- Promise工作流程如下图:

- Promise的基本用法:
const p = new Promise((resolve, reject) => {
setTimeout(() => {
const time = Date.now()
if (time % 2 === 0) {
resolve('成功的数据,value = ' + time)
} else {
reject('失败的数据,reason = ' + time)
}
}, 1000);
})
p.then(value => {
console.log('成功的回调', value)
}, reason => {
console.log('失败的回调', reason)
})
- 为什么现在使用Promise,回调的缺点在哪里?
- 不规范,名称五花八门,有人用success+error,有人使用success+fail,有人用done+fail。
- 容易出现回调地狱,回调嵌套,代码变得看不懂。
- 很难进行错误处理。
本人参考链接:www.cnblogs.com/jiangweiche…