首页 >>  正文

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":"pika","pub_time":1710231954000,"pure":"","rawurl":"http://zm.news.so.com/edc050804c5eaf5ea2fbedd7a1e03938","redirect":0,"rptid":"cbd9272e7816c465","rss_ext":[],"s":"t","src":"HOOBOO青柠","tag":[],"title":"Promise的九大方法

云芬林4004typescript async函数必需返回promise么 -
应彭琰17330364831 ______ 1.promise promise模式在任何时刻都处于以下三种状态之一:未完成(unfulfilled)、已完成(resolved)和拒绝(rejected).以CommonJS Promise/A 标准为例,promise对象上的then方法负责添加针对已完成和拒绝状态下的处理函数.then方...

云芬林4004permit、allow、promise的区别 -
应彭琰17330364831 ______ 1、promise,表示承诺,这里是表示她承诺,所以不能用另外两个. 2、allow,表示允许,allow sb to do sth,固定搭配. 3、permit,也是允许,但是更加正式,体现出一种强烈的主观色彩.

云芬林4004下面哪个javascript库不支持promise规范 -
应彭琰17330364831 ______ 一直以来,JavaScript处理异步都是以callback的方式,在前端开发领域callback机制几乎深入人心.在设计API的时候,不管是浏览器厂商还是SDK开发商亦或是各种类库的作者,基本上都已经遵循着callback的套路.近几年随着JavaScript开发...

云芬林4004achieve one's promise与keep one's promise的区别 -
应彭琰17330364831 ______[答案] 我是这么理解的,promise分为两种:(1) I promise to clean the house (2) I promise not to tell him.对于第一种,如果我打扫了房子,那么我就是 achieve my promise,第二种,如果我没有告诉他,那么我就是 keep my prom...

云芬林4004promise a 规范可以嵌套使用吗 -
应彭琰17330364831 ______ 规范出现的原因1、 我们不知道异步请求什么时候返回数据,所以我们就需要些回调函数.但是在某些情况下我们需要知道数据是在什么时候返回的,然后进行一些处理.2、 当我们在异步回调里面处理的操作还是异步操作的时候,这样就形成了异步回调的嵌套3、 正是为了杜绝以上两种情况的出现,社区出现了Promise/a+规范 规范的内容是什么1、 不管进行什么操作都返回一个promise对象,这个对象里面会有一些属性和方法(这个效果类似于jQuery中的链式编程,返回自己本身)2、 这个promise有三种状态 Unfulfilled(未完成,初始状态) Fulfilled(已完成)

云芬林4004一个英语小问题 -
应彭琰17330364831 ______ 这里product promising是一个词组,表示“产品承诺”,by是介词,后面要跟名词或动名词,promise +ing是动名词形式.

云芬林4004英语中将来时是什么,都分几种时态 -
应彭琰17330364831 ______[答案] 一、一般将来时态: 四种形式表达将来时: will / shall+动词原形, be going to+动词原形, be doing,以及一般现在时. ... 过去将来时表示从过去某一时间看将要发生的动作或存在的状态,这种时态常用在宾语从句中. I thought the film was going to be ...

云芬林4004什么是非谓语动词和谓语动词?请给出定义及举例.请从现代汉语角度解析, -
应彭琰17330364831 ______[答案] 一种解释:非谓语动词 在句子中充当除谓语以外的各种句子成分的动词形式叫做非谓语动词(the Non-Finite Verbs).非谓语动词有三种:不定式(the Infinites)、动名词(the Gerunds)和分词(the Participles). 1.非谓语动词与谓语动词的相同点...

云芬林4004名词的词缀是怎样的啊 -
应彭琰17330364831 ______ 1.-ade名词后缀,(1)表示“状态,物品”(2)表示“个人或集体” 2.-age名词反缀,(1)表示“状态,总称”(2)表示“场所,物品”(3)表示“费用” 3.-ain 名词后缀,表示“…人” 4.-al名词后缀,表示“人,物,状态”,常见的与连...

云芬林4004Javascript Promise 为什么这么迷人 -
应彭琰17330364831 ______ 异步编程会变得越来越重要,在这种情况下,我们需要找到办法来降低复杂度,promise模式就是一个很好的例子,它的风格比较人性化,而且主流的JS框 架提供了自己的实现.所以在编程实践中,开发人员应该尝试这种便捷的编程技巧.需要注意的是,promise模式的使用需要恰当地设置promise对 象,在对应的事件中调用状态转换函数,并且在最后返回promise对象.

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