首页IT科技js之promise

js之promise

时间2025-04-30 16:32:46分类IT科技浏览3593
导读:##### 仅做记录复习使用 ####...

##### 仅做记录复习使用 ####

数据有点混乱 暂时不要看

promise

promise是一个对异步操作进行封装并返回其结果的构造函数.

使代码更加简洁和避免回调地狱            。

promise是浏览器引擎自带的(但不是所有浏览器都支持promise)

promise的参数是一个函数且必须有这个函数            ,否则报错                 ,姑且命名为A函数;

let p = new Promise() console.log(p); // TypeError: Promise resolver undefined is not a function

A函数里有两个参数     ,这两个参数也是函数                 。res和rej这两个参数都是函数      ,名字随意     。

res是成功时的回调

rej是失败时的回调

new Promise函数是同步函数,并且是立即执行的      。

promise共有三种状态                 ,pending,fulfilled,rejected

状态只能从pending变为fulfilled状态           ,成功状态                 。

或者从pending变为rejected状态      ,失败状态           。

promise只有这两种转变状态                 ,是转变状态哈      。在无其他状态                 。

而一旦转变状态确定           ,就不可更改           。

例如:pending转变到fulfilled,状态就确定了                 ,只能是fulfilled状态;如果想转成rejected状态                ,是不能转的。

当promise刚new出来时,是pending状态                 。

promise函数对象有三个属性            ,如上图展示的                ,[[Prototype]]其实就是是__ proto__;其他两个属性如下:

PromiseState:就是promise的现在状态                。

当你调用res函数     ,状态立马变为fulfilled(成功状态)

当你调用rej函数            ,状态立马变为rejected(失败状态)

如果两个状态都存在                 ,以谁先调用为准

PromiseResult :res或rej返回的结果

PromiseResult就是res或rej执行后的返回的结果     ,是返给then的。

当你new 一个promise时      ,就已经开始自动执行函数            。promise是同步的                 ,但then是异步的           ,要注意区分                。

promise实例原型上的then函数

res函数和rej函数返回的数据      ,谁来接收的                 ,用then函数     。

then函数里的参数是两个异步回调函数           ,是异步的哈,第一个参数函数用于接收res返回来的数据                 ,第二个参数函数用于接收rej返回的数据            。

then的第一个参数函数里的形参用来接收res返回的数据                 。

then的第二个参数函数里的形参用来接收rej返回的数据     。

其实then里面的函数就是res和rej

如果new promise中没有写res或rej ;则then里的函数不会执行

let p = new Promise((res,rej)=>{ }) p.then(val=>{ console.log(11); // 11不输出 })

then的返回值

1           、如果(父级)上一个then返回的是数据或undefined                ,则(子级)下个then的状态为成功状态,并将父级返回值返回到子级then的参数里面 let p = new Promise((res,rej)=>{ res(11) }) // 父级then let p1 = p.then(val=>{ console.log(val); // 11 // 默认是return undefined }) // 子级then ,then中的参数是上一个then返回的值            , p1.then(value=>{ console.log(value); // undefined })

父级then返回的是一个数据:

let p = new Promise((res,rej)=>{ res(11) }) let p1 = p.then(val=>{ console.log(val); return {name:wyy} }) p1.then(value=>{ console.log(value); }) 如果父级then抛出的是一个错误                ,则父级then的状态为失败状态     ,并将失败状态的值返回给子级then

通过throw主动抛出错误或者代码出现错误            ,则promise的状态为rejected                 ,值为throw的值;或者代码出错也为rejected状态     ,例如输出一个不存在的a;console.log(a)      。

第二个then的promise实例状态是根据p.then的返回值决定的

如果没有return      ,则默认为undefined                 ,即是fulfilled状态                 。

小结:

3                 、通过throw主动抛出错误或者代码出现错误           ,则promise的状态为rejected      ,值为throw的值;或者代码出错也为rejected状态                 ,例如输出一个不存在的a;console.log(a)           。

4      、通过return 返回一个promise对象           ,则新promise就是return的promsie,其中的值就是resolve和reject传递的值

catch

catch是处理rej函数的      。当返回错误时调用catch

当new promise出现rej(), throw, 语法错误以上三种形式式                 ,就会调用catch函数                 。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
java gui编程的步骤是什么(浅谈-java GUI-基础理论) 前端埋点技术是什么工作(基于Vue3实现前端埋点上报插件并打包发布到npm的详细过程)