首页 >>  正文

promise三个状态

来源:baiyundou.net   日期:2024-09-22

1、promise.resolv

 

静态方法 Promise.resolve(value)可以认为是 new Promise方法的语法糖,比如Promise.resolve(42) 可以认为是以下代码的语法糖。

 

new Promise(function (resolve) {

    resolve(42)

})

这个静态方法会让Promise对象立即进入确定(即resolved) 状态,并将42传递给后面 then 里所指定的 onFulfilled函数。

 

2、promise.reject

 

Promise.reject(error)是和Promise.resolve(value)类似的静态方法,是 new Promise 方法的快捷方式。比如 Promise.reject(new Error("Promise reject error")) 就是下面代码的语法糖形式

 

new Promise(function (reject) {

    reject(new Error("Promise reject error"))

})

它的功能是调用该 Promise对象通过then指定的 onRejected函数,并讲错误(Error)对象传递给这个onRejected函数

 

3、promise.then

 

Promise.then(onFulfilled, onRejected)

① 函调函数异步执行

Promise/A+规范统一规定:Promise 只能使用异步调用方式

② 返回值

Promis.then不仅仅是注册一个回调函数那么简单,它还会将回调函数的返回值进行变换,创建并返回一个Promise 对象。正是 then函数中有了这样返回值的机制,才能使得在整个Promise链式结构当中,每个then方法都能给 下一个then方法传递参数

③ promise穿透

 

4、promise.catch

 

① 语法糖的本质

Promise.catch只是promise.then(undefined, onRejected) 方法的一个别名而已。也就是说,这个方法用来注册当Promise对象状态变为 Rejected时 的回调函数

第一种写法

Promise.resolve()

  .then((data) => console.log(data))

  .then(undefined, (err) => console.log(err));

 

第二种写法

Promise.resolve()

  .then((data) => console.log(data))

  .catch((err) => console.log(err));

 

② 只有一个主人

整个Promise链中,catch只属于异步触发它当中回调函数 执行的那个Promise,并不属于所有 Promise

 

5、promise.finally

 

promise.finally方法的回调函数不接受任何参数,这意味着finally没有办法 知道,前面的Promise状态到底是fulfilled还是rejected 。这表明,finally方法里面的操作,应该是与Promise状态无关的,不依赖于 Promise的执行结果。

 

6、promise.all

 

Promise.all接受一个promise对象的数组作为参数,当这个数组里的所有 Promise 对象 全部变为resolve或者reject状态的时候,它才会去调用.then方法。

传递给Promise.all的 promise并不是一个个的顺序执行的,而是同时开始、并行执行的。

 

7、promise.allSettled

 

Promise.allSettled()的入参和Promise.all、Promise.race一样,接受一个promise 对象的数组作为参数,也是同时开始、并行执行的。但是Promise.allSettled的返回值需要注意以下几点:

Promise.allSettled不会走进catch,当所有输入Promise都被履行或者拒绝时, statusesPromise 会解析一个具有具体完成状态的数组

Promise.allSettled()在你需要执行平行和独立的异步操作并收集所有结果时非常有效, 即使某些异步操作可能失败。

 

8、promise.race

 

Promise.rece()的使用方法和 Promise.all一样,接收一个promise 对象的数组为参数,Promise.race是要有一个promise对象进入Fulfilled或者 Rejected状态的话,就会继续进行后面的处理。这里依旧有两个点要注意:

和Promise.all一样是所有数组当中的Promise同时并行的

Promise.race 在第一个Promise对象变为Fulfilled之后,并不会 取消其他promise对象的执行。

Promise.race接受的是一个Promise对象数组,但是返回的确实最先完成Fulfilled 或者最先被Rejected的一个Promise的结果

 

9、promise.any

 

Promise.any的入参和Promise.all、Promise.race、Promise.allSettled一样, 接收一个promise对象的数组作为参数。

","gnid":"99b672bdcf4f63a0d","img_data":[{"flag":2,"img":[{"desc":"","height":518,"title":"","url":"https://p0.ssl.img.360kuai.com/t012ec4533850b75233.jpg","width":877}]}],"original":0,"pat":"art_src_0,fts0,sts0","powerby":"cache","pub_time":1710231954000,"pure":"","rawurl":"http://zm.news.so.com/edc050804c5eaf5ea2fbedd7a1e03938","redirect":0,"rptid":"cbd9272e7816c465","rss_ext":[],"s":"t","src":"HOOBOO青柠","tag":[],"title":"Promise的九大方法

万咳怎4284一般情况下宾语从句都用THAT引导吗 -
欧变志18260543248 ______ 宾语从句:是做动词、介词或形容词宾语的从句. 一、做动词的宾语: I think (that) you will like the pictures. 我想你会喜欢这些画的. (连接词that无意义,在从句中不充当任何成分,可以省略) 当宾语从句(通常是由that引导的宾语从句)有...

万咳怎4284angular 怎么把promise对象改为同步的 -
欧变志18260543248 ______ 这篇文章主要介绍了Angular中的Promise对象($q介绍),本文讲解了Promise模式、Q Promise的基本用法、AngularJs中的$q.defferd等内容,需要的朋友可以参考下 在用JQuery的时候就知道 promise 是 Js异步编程模式的一种模式,但是不是...

万咳怎4284promise 只有then之后才调用吗 -
欧变志18260543248 ______ 1、then支持延续任务调用方式(Continuation tasks),而done不支持 比如then可以这样用,而done不可以: promise().then().then().then() 2. then会捕获未处理的异常然后把错误状态作为返回值返回,而done则会把异常直接抛出

万咳怎4284如何组RAID0并且重新分区? -
欧变志18260543248 ______ 其实使用RAID 0的关键是掌握RAID控制芯片和BIOS的使用.首先应当在主板上找到相关RAID功能的跳线,将它设定为RAID模式.当然,部分主板可能采用BIOS软设置,具体情况请参照说明书.当你把RAID功能打开并接上两个硬盘时,系统开...

万咳怎4284名词的词缀是怎样的啊 -
欧变志18260543248 ______ 1.-ade名词后缀,(1)表示“状态,物品”(2)表示“个人或集体” 2.-age名词反缀,(1)表示“状态,总称”(2)表示“场所,物品”(3)表示“费用” 3.-ain 名词后缀,表示“…人” 4.-al名词后缀,表示“人,物,状态”,常见的与连...

万咳怎4284angular中什么是deferred对象 -
欧变志18260543248 ______ Promise是一种模式,以同步操作的流程形式来操作异步事件,避免了层层嵌套,可以链式操作异步事件.……deffered 对象的方法1.resolve(value):在声明resolve()处,表明promise对象由pending状态转变为resolve.2.reject(reason):在声明resolve()处,表明promise对象由pending状态转变为rejected.3.notify(value) :在声明notify()处,表明promise对象unfulfilled状态,在resolve或reject之前可以被多次调用.……

万咳怎4284磁盘阵列(RAID) 那个模式又快又安全? -
欧变志18260543248 ______ 只有这3个的话选择RAID1了,不过只能用2块盘建立,容量只有一块盘.

万咳怎4284谁会做RAID 0系统 -
欧变志18260543248 ______ 那不是系统所基于的.必须要你的硬件支持哦!!!老大,比如你主板支持磁盘阵列吗?不行就需要一个外置RAID卡了哦!硬盘接在一起,形成磁盘阵列,这样,电脑的读去速度就会加快 RAID 0 通常是两快同样大小的组在一起!虽然RAID 0可...

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024