Promise详解
2022-04-02 23:59:50 0 举报
AI智能生成
详细拆解promise的知识点
作者其他创作
大纲/内容
Promise状态改变: [[PromiseState]]
规则: 1. pending -> resolved
2. pending -> rejected
2. pending -> rejected
说明:只有以上两种,且一个Promise对象的状态只能改变一次,无论成功还是失败,都只会有一个结果数据
Promise对象的值: [[PromiseReult]]
说明:保存着实例对象【成功/失败】的return的结果值
Api
1. Promise构造函数; Promise(executor){}
executor函数: 执行器行数 (resolve, reject)=>{}
resolve函数:内部定义成功时调用的函数
reject函数:内部定义失败时调用的函数
说明:executor会在Promise内部立即同步调用,异步操作在执行器中执行
2. Promise.prototype.then((onResolved, onRejected)=>{} )方法
onResolved函数: 成功时的回调函数 value=>{}
onRejected函数: 失败时的回调函数 reason=>{}
3. Promise.prototype.catch((onRejected)=>{} )方法
onRejected函数: 失败时的回调函数 reason=>{}
4. Promise.resolve(value=>{})方法
value: 成功的数据或promise对象
说明: 返回一个 成功/失败 的promise对象
5. Promise.reject(reason=>{})方法
reason: 失败数据
说明: 返回一个失败的promise对象
6. Promise.all(promises)方法
promises: 包含n个promise的数组
说明: 返回一个新的Promise,只有所有的Promise都成功才成功,只要有一个失败了就直接失败
7. Promise.race(promises)方法
promises: 包含n个promise的数组
说明:返回一个新的Promise,第一个完成的promise的结果状态就是最终的结果状态
关键问题
1. 如何改变Promise状态?
1. resolve(value):如果当前是pending就会变成resolved
2. reject(reason):如果当前是pending就会变成rejected
3. 抛出异常:如果当前是pending就会变成rejected
2. 一个Promise指定多个成功/失败回调函数,都会调用么?
1. 当promise改变对应状态时,对应的回调都会执行
3. 改变Promise状态和指定回调函数谁先谁后?
1. 都有可能,正常情况下是先指定回调再改变状态,但也可以先改变状态再指定回调
2. 如何先改变状态在指定回调?
a. 在执行器中直接调用 resolve() / reject()
b. 延迟更长时间才调用 then()
3. 什么时候才能得到数据?
a. 如果先指定的回调,那当状态发生改变时,回调函数就会调用,得到数据
b. 如果先改变的状态,那当指定回调时,回调函数就会调用,得到数据
4. promise.then() 返回的新Promise的结果由什么决定?
1.简单表达
a. 由 then() 指定的回调函数的执行结果决定
2. 详细表述
a. 如果抛出异常:新的Promise变成rejected, reason为抛出的异常
b. 如果返回的非Promise对象的任意值,则新的Promise变成resolved, value为返回的值
c. 如果返回的是另一个新的Promise,此Promise的结果就会成为新promise的结果
0 条评论
下一页