首页IT科技js之promise

js之promise

时间2025-07-30 04:52:07分类IT科技浏览4788
导读:##### 仅做记录复习使用 ####...

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

数据有点混乱 暂时不要看

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
linux改变环境变量(<Linux>环境变量) 2021年综艺推荐(2024年热门综艺节目哪些最好看_全网最好看的综艺节目TOP5推荐)