首页IT科技js之promise

js之promise

时间2025-09-19 12:21:46分类IT科技浏览5201
导读:##### 仅做记录复习使用 ####...

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

数据有点混乱 暂时不要看

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
c++ multiset用法(C++11:tuple元组)