Promise就是一个类
1、promise三种状态 pending fulfilled rejected
// promise 的特点以及概念
// https://promisesaplus.com/ promisea+ 规范 都通过这个规范来实现的
// promise es6 内部已经实现了。 ie以下不支持promise,通过mdn,can i use 可以查询到浏览器支持情况 需要polyfill es6-promise
// promise 为什么会产生 解决异步问题
// 1.多个异步请求并发 (希望同步最终的结果) Promise.all
// 2.链式异步请求的问题 上一个人的输出是下一个人的输入,形成恶魔金字塔 Promise的链式调用可以解决这个问题
// 3.缺陷:还是基于回调的
// 1.promise 有三个状态:成功态(会调用resolve) 失败态(会调用reject) 等待态(pending)(又不成功又不失败)
// promise就是一个类
let promise = new Promise((reso,reje) => {
})
console.log(promise)
let promise = new Promise((reso,reje) => {
reso('发工资')
})
console.log(promise)
let promise = new Promise((reso,reje) => {
reje('没发工资')
})
console.log(promise)
2、用户自己决定失败的原因和成功的原因 成功和失败也是用户定义的
3、promise 默认执行器是立即执行
let promise = new Promise((reso,reje) => {
console.log(1)
})
console.log(2)
4、promise的实例都拥有一个then方法
let promise = new Promise((reso,reje) => {
reso('成功')
})
promise.then((data)=>{
console.log('success',data)
},(err)=>{
console.log('failed',err)
})
5、如果执行函数时发生了异常也会执行失败逻辑
let promise = new Promise((reso,reje) => {
throw new Error('失败了')
})
promise.then((data)=>{
console.log('success',data)
},(err)=>{
console.log('failed',err)
})
6、如果promise一旦成功就不能失败,反过来也一样
let promise = new Promise((reso,reje) => {
throw new Error('失败了')
reso('成功')
})
promise.then((data)=>{
console.log('success',data)
},(err)=>{
console.log('failed',err)
})
7、promise 成功和失败的回调的返回值 可以传递到外层的下一个then
8、如果返回的是普通值的话 (传递到下一次的成功中,不是错误不是promise就是普通值) ,出错的情况(一定会走到下一次的失败),可能还要promise的情况(会采用promise的状态,决定走下一次的成功还是失败 )
9、错误处理 如果离自己最近的then 没有错误处理(没有写错误函数) 会向下找,如果又错误处理函数则执行错误处理函数,然后根据第八条决定走下一个then的成功或失败,没有返回值就相当于返回undefined
10、每次执行完promise.then方法后返回的都是一个“新的promise" (promisey一旦成功或者失败就不能修改状态)
11、值穿透
let p = new Promise((resolve,reject)=>{
resolve(1)
})
p.then().then().then(data=>{
console.log(data)
})