Promise本意是承诺,在程序中的意思就是承诺我过一段时间后会给你一个结果.什么时候会用到过一段时间?答案是异步操作,异步是指可能比较长时间菜能有结果的才能,列如网络请求、读取本地文件等
1.Promise的三种状态
- Pending---Promise对象实列创建时候的初始状态
- Fulfilled---可以理解为成功的状态
- Rejected---可以理解为失败的状态
-
这个承诺一旦从等待状态变为其他状态就永远不能更改状态了,比如说一旦状态北纬resolved后,就不能再次改变为Fulfilled
let p = new Promise((resolve, reject) => {
reject('reject')
resolve('success')//无效代码不会执行
})
p.then(
value => {
console.log(value)
},
reason => {
console.log(reason)//reject
}
)
当我们在构造Promise的时候,构造函数内部的代码是立即执行的
new Promise((resolve, reject) => {
console.log('new Promise')
resolve('success')
})
console.log('end')
// new Promise => end
2.promise的链式调用
- 每次调用返回的都是一个新的Promise实列(这就是then可用链式调用的原因)
- 如果then中返回的是一个结果的话会把这个结果传递下一次then中的成功回调
- 如果then中出现异常,会走下一个then的失败回调
- 在then中使用return,那么return的值会被Promise.resolve()包装
- then中可以不传递参数,如果不传递会透到下一个then中
- catch会捕获到没有捕获的异常