总字数 585
预计阅读时间 2 分钟
如果只是执行一次单步回调 , 那么传统的回调函数执行的方式其实并没有什么问题
Promise的主要意义是在于解决多重回调的多层嵌套问题
如果回调的嵌套层级太多 , 会造成代码可读性很差 , 难以维护
如果我们要使用setTimeout来构造一个顺序异步执行的过程
需要这样做
1 | function test(num, func) { |
使用Promise可以将上述的代码改造成线性的模式 , 可读性增强 , 同时也更便于调试
1 | new Promise(function(resolve, reject){ |
让then方法的函数每次都是返回不同的Promise实例 , 再去指定这个实例的回调函数即可
并且对于Promise对象 , 它对于resolve和reject的执行是异步的
例如 :
1 | new Promise(function(resolve, reject){ |
Promise.resolve 和 Promise.reject
Promise.resolve
方法会返回一个Promise实例
分为下面几种情况
参数是一个Promise实例
将不做任何修改, 直接返回这个Promise实例参数是一个thenable对象
thenable对象意思是这个对象当中带有then属性, 值是一个函数, 接收参数resolve和reject两个函数1
2
3
4
5
6
7
8
9const p1 = Promise.resolve({
then: (resolve, reject) => {
resolve('异步回调执行')
}
})
// 等价于如下写法
const p2 = new Promise((resolve, reject) => {
resolve('异步回调执行')
})参数是不具有then方法的对象
1
2
3
4
5const p1 = Promise.resolve('Hello')
// 等价于如下写法
new Promise((resolve, reject) => {
resolve('Hello')
})没有任何参数
1
2
3
4
5const p1 = Promise.resolve()
// 等价于如下写法
new Promise((resolve, reject) => {
resolve()
})其实实际效果可以归为到第三类
Promise.reject
方法就相对比较简单了
只有这一种情况
1 | Promise.reject('Error') |
不论传入什么参数, 都会传递给reject