promise是一种es6中推出的一种用于解决异步编程的方案,用于解决嵌套的回调地狱的问题--promise的链式调用
初步认识
内部有两种回调函数(resolve,reject) promise有三种状态 分别为 pending 初始态(准备状态) resolved/fulfilled(成功态) rejected(失败态) promise的状态是不可逆的 只能是从初始态变化到其他两种状态
针对内部执行的回调函数 会执行对应状态的回调
.then()返回的是一个新的promise对象
.then()后面可以用catch()去捕捉错误,还可以用finally()用于对应最终不管promise的结果会是什么样都会执行的回调
深入理解
ONE:
.then()后面可以继续接.then() 而新promise的结果状态由上一个.then指定的回调函数执行的结果决定(看返回值来决定)
- 抛出错误 进入失败的回调状态
- 返回失败的promise
- 返回成功的promise
- 返回其它任何值 进入成功的回调状态
TWO:
async/await与promise的关系
任何的一个函数在前面加入了async后 返回来的都是一个promise对象 async与await连用后 结果等待的是一个promise对象成功的状态结果 这里需要模拟发送请求获取数据
如果一个函数内部 使用了多个请求函数await的形式, 第二次的请求url依赖于第一次的 结果; 第三次的请求url依赖于第二次的结果;以此类推 如果第一次请求的结果就失败,那么就会阻断后续的请求
THREE:
常用方法 promise.all()解析 切记传入的是数组 promise.all需要等到传入的所有的promise状态都为成功决议的时候 它自身的promise 才会成功 如果抛出异常 那么返回的结果是第一个失败的promise的结果返回
promise.race()表示多个Promise相互竞争,谁先有结果,那么就使用谁的结果; 不管其状态如何
第一次写文章 欢迎大家一起交流指导 一起进步 大佬勿喷