帮你弄懂Promise原型方法then、catch、finally

作者&投稿:单于淑 (若有异议请与网页底部的电邮联系)
~

PS: 最近一周加班太多,没有太多空闲时间读书,暂时先这一篇吧!

Promise 构造函数的原型上实现了 then , catch , finally 方法,也就意味着每个 Promise 实例都拥有这样 3 个函数。

另外提一下 Promise 构造函数上实现了 all , race , reject , resolve , allSettled , any 方法,==这些方法只属于 Promise 构造函数自己,是不能在实例中被调用的==(也就是只会以这种形式出现:如 Promise.all() )

then() 方法可以处理 Promise 被接受或拒绝的情况。

then() 最多可以接受两个参数 (回调函数):

① onFulfilled

当 Promise 变成接受状态 ( fulfilled ) 时调用的函数。该函数有一个参数,即接受的最终结果 (the fulfillment value)。

如果该参数 (指的是 onFulfilled ) 不是函数,则会在内部被替换为 (x) => x ,即原样返回 promise 最终结果 (后面会讨论 then 方法的返回值)。

注意:这里说的参数不是函数也 ==包括没有参数== 的情况!下图说明了这 3 钟情况:

② onRejected

1)当 Promise 变成拒绝状态 ( rejected ) 时调用的函数。该函数有一个参数,即拒绝的原因 (rejection reason)。

2)如果该参数 (指的是 onRejected ) 不是函数,则会在内部被替换为一个 "Thrower" 函数 (it throws an error it received as argument),也就是会报错。

注意:同理,这里说的参数不是函数也 包括没有参数 的情况:

当 Promise 完成 (fulfilled) 或者失败 (rejected) 时,会异步调用返回函数,==返回一个 Promise 对象==,不过返回值与 then() 方法中的回调函数是有关系的,如果then() 的回调函数:

没有返回任何值 。那么 then 返回一个接受状态的 Promise ,并且该接受状态回调函数的参数值为 undefined 。

也就是说在处理 then() 返回的 Promise 的回调函数中参数是 undefined ,不理解就看下面的例子:

下面的例子可能对你理解第二句话有帮助 (后面的几种情况都与此类似,都举例说明了):

返回一个值 。那么 then 返回一个接受状态的 Promise ,并且将返回的值作为接受状态的回调函数的参数值。

与 ① 情况类似,只是返回的 undefined 变成值

抛出一个错误 。那么 then 返回一个拒绝状态的 Promise ,并且将抛出的错误作为拒绝状态的回调函数的参数值

后面三种是分别返回不同状态的 Promise

返回一个接受状态的 Promise 。那么 then 也会返回一个接受状态的 Promise ,并且将那个 Promise 的接受状态的回调函数的参数值作为该被返回的 Promise 的接受状态回调函数的参数值

返回一个拒绝状态的 Promise 。那么 then 也会返回一个拒绝状态的 Promise ,并且将那个 Promise 的拒绝状态的回调函数的参数值作为该被返回的Promise的拒绝状态回调函数的参数值

返回一个未定状态 ( pending ) 的 Promise 。那么 then 返回 Promise 的状态也是未定的,并且它的终态与那个 Promise 的终态相同;同时,它变为终态时调用的回调函数参数与那个 Promise 变为终态时的回调函数的参数是相同的

示例中延时返回以得到 pending 状态的 Promise ,立即查看就得到还未有返回值的 pending 状态,2秒钟之后就能看到有返回值的终态

也可以试着用 then() 方法捕捉一下参数:

catch() 方法用来处理 Promise 被拒绝的情况,相当于 then(undefined, onRejected)

catch() 接受一个参数 (回调函数):

① onRejected

1)当 Promise 被 rejected 时调用的函数。 该函数拥有一个参数 reason ( rejection 的原因)

2)如果这个参数 (指的是 onRejected ) 不是函数时,也是会报错的。这与 then() 方法中第二个参数不是函数的情况吻合。

如果 catch() 中的回调函数 抛出一个错误 或返回一个本身失败的 Promise , 则返回一个 rejected 状态的 Promise ;其他情况返回 resolved 状态的 Promise

catch()链式调用参考




帮你弄懂Promise原型方法then、catch、finally
Promise 构造函数的原型上实现了 then , catch , finally 方法,也就意味着每个 Promise 实例都拥有这样 3 个函数。另外提一下 Promise 构造函数上实现了 all , race , reject , resolve , allSettled , any 方法,==这些方法只属于 Promise 构造函数自己,是不能在实例中被调...

girlfriend 歌词
Hey Hey You You 嘿嘿 你啊你 I want to be your girlfriend 我想要成为你的女朋友 I can see the way 我能理解你 I see the way 我懂你 You look at me 你正看着我 And even when you look away 尽管当你转视别处 I know you're think of me 我知道你是在想着我的 I know you ...

帮我找些歌
郭富城:我是不是该安静的走开 歌手:郭富城 专辑:请把我的情感带回家 作曲:陈秀男作词:张方露 编曲:ricky ho 我不知道为甚麽这样 爱情不是我想像 就是找不到往你的方向 更别说怎麽遗忘 站在雨里泪水在眼底 不知道该往那里去 心中千万遍不停呼唤你 不停疯狂找寻你 我是不是该安静的走开 还是该勇...

英文介词搭配
68. look after 照顾\/看护You can borrow this book, but you must promise to look after it.69. think about something 考虑\/思考I've thought about what you said and I've decided to take your advice.70. think of something 想起It was my idea, I though of it first.71. dream about 梦见I...

翻译英文合同需要注意的地方有哪些
合同翻译是一种专业的翻译,翻译的时候一定要慎重,很多细节需要注意一下.你可以找专业的合同翻译公司---语美多翻译公司,帮助你翻译这些合同文件.一下是翻译英文合同注意的一些事项,你可以看下.在英文合同翻译中,前提条件是弄懂合同的定义,包括合同中应有的基本要素.第一,英文合同的定义 1.在英文中,合同...

my love 歌词问题
To promise you my love 我向你保证 吾爱 To tell you from the heart 我决不是在撒谎 You're all I'm thinking of 你是我所想的一切 I'm reaching for a love that seems so far 但得到一份爱却是哪样遥不可及 So I say a little prayer 我稍稍向上帝祈求 And hope my dreams will...

初中英语句型
afford 负担得起 choose 决定 fail 未能 manage 设法 promise 答应 agree 同意 decide 决定 help 帮助 offer 主动提出 refuse 拒绝 arrange 安排,设法 demand 要求 hesitate 犹豫 plan 计划 want 想要 ask 要求 determine 决心 hope 希望 prepare 准备 wish希望 care 想要 expect 期待 long 渴望 ...

我想问一下英语中 宾语 状语 谓语 定语指什么 而且怎么分辨这个个什么...
3、 根据被修饰词来判断从句的种类 定语从句常常修饰一些具有实际意义的名词,如:the film;the student;the book;a house等等。而同位语从句常常修饰一些表示抽象概念的名词,如fact、idea、promise、truth等,用来说明这些名词所表示的具体内容。状语从句在句子中常用来修饰谓语动词。4、 根据从句前词的...

英语三级考试的题型是什么啊?
很简单,比高考的难度要小的多,有完形填空的,形式没有什么特别

英语作文三百个单词,加题目
First,the most important thing in a friendship is to respect each other.If a friend tells you a secret and asks you not to tell anyone, you should keep your promise.Second, friends should be ready to help each other. A friend in need is a freind indeed.If your friend is in difficulty...

永济市13555214946: promise(允许)+to do sth 还是doing sth
豆定氟胞: promise sb.to do sth promise doing sth

永济市13555214946: promise to do sth什么意思 -
豆定氟胞: promise to do许诺做某事He made a solemn promise to do better. 他郑重保证要做得更好. If you promise to do something, you must not break your promise. 如果你答应做某事,就一定不要失言. Don't worry. I promise to do just as you say. 别担心, 我照你说的做就是了.

永济市13555214946: promise sb. to do sth. 中to do sth 为什么做OC而不做DO? -
豆定氟胞: 这个问题很简单 首先你要搞清楚 什么是双宾语 什么样的动词可以加双宾语 实意动词分为及物动词和不及物动词 那不及物动词不能直接加宾语 所以能加双宾语的必然是及物动词中的部分动词 且两个宾语 分别是指人的间接宾语和指物的直接宾语 能接双宾语的动词主要有give, teach, buy, lend, find, hand, leave, sell, show,pass, bring等 给我一本书 教我英语 等等从双宾语的词性可以看出 to do 并不符合双宾语中任何一个的要求 其实只有me是promise的宾语 承诺我 而具体承诺了何种内容 则用to do来加以说明 所以是宾语补足语

永济市13555214946: promise sb to sth有这个句型吗 -
豆定氟胞: 没有这个用法.promise作动词时,用promise sth(to sb)或者promise sb sth.作名词时,用make/keep/break promise to do sth.

永济市13555214946: promise sth to sb等于promise sb sth吗 -
豆定氟胞: 等于. 需要注意的是promise sb sth的sth只能是名词,或接从句. 词汇解析: promise 英文发音:[ˈprɒmɪs] 中文释义:v.许诺;承诺;答应;保证;使很可能;预示 词形: 第三人称单数: promises 复数: promises 现在分词: promising ...

永济市13555214946: ptomise to 加动词,原形还是ing形式 -
豆定氟胞: promise to do sth或者to sb,意思是承诺做某事,或者对某人承诺.例句1、Claire had made me promise to tell her the truth.

永济市13555214946: Promised的动词原形 -
豆定氟胞: 你好,很高兴在这里回答你的问题:....Promised的动词原形 promise

永济市13555214946: promise to do sth,permit doing sth? -
豆定氟胞: 是的.用法正确. eg; He promised to come early. Smoking is not permitted.

永济市13555214946: promise sth. to sb. 是什么意思? -
豆定氟胞: 为某人承诺做某事!

永济市13555214946: promise的用法 -
豆定氟胞: promisen. 1. 承诺,诺言[C][(+of)][+(that)][+to-v] Give me your promise that you'll never be late again. 答应我你绝不再迟到了. 2. 希望,前途[U][S] The young man shows promise as a poet. 这位青年有成为诗人的希望. vt. 1. 允诺,答应[+to-v][+...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网