🤔 为什么是Promise.resolve()而不是Promise.fulfill()

简介: `Promise.resolve()` ,如果它返回一个已经完成的Promise,为什么不将其命名为 `Promise.fulfill()` 之类的名称?**`Promise.resolve()`** 是一个很奇怪的名字,不是吗?🤔它返回一个已经完成的Promise,但它听起来像是要解决一个问题。🤷‍♂️

嗨,大家好!这里是道长王jj~ 🎩🧙‍♂️

Promise.resolve() ,如果它返回一个已经完成的Promise,为什么不将其命名为 Promise.fulfill() 之类的名称?Promise.resolve() 是一个很奇怪的名字,不是吗?🤔它返回一个已经完成的Promise,但它听起来像是要解决一个问题。🤷‍♂️

为什么不叫 Promise.fulfill() 呢?这样就可以和Promise的状态 fulfilled 对应起来。😊

还有,你还记得Promise函数的第一个参数吗?它也叫 resolve() ,但它其实就是把Promise变成 fulfilled 的魔法棒。✨

这个词也很奇怪,为什么不叫 fulfill() 呢?🙄

是什么决定了Promise是已解决还是未解决?

我们知道 Promise 它可以有三种状态: pendingfulfilledrejected 。🤔

Promise要么是已解决的,要么是未解决的。😯

那么,谁来决定Promise是已解决还是未解决呢?🙋‍♂️

我们之前学过的 Promise,都是代表一个单个的异步操作。我们给它加上 then() 的处理程序,就可以拿到它的结果,然后返回一些东西,比如对象、字符串、数字或者 undefined 之类的。这样,then() 返回的 Promise 就会根据我们返回的东西来决定它的状态。

Promise.resolve("Hello world!")
  .then(response => ({
   name: response }))
  .then( repos => repos.name )
  .catch(error => console.error(error));

比如说,在这个例子里,第一个 then() 返回了一个对象,那么它返回的 Promise 就会用这个对象来实现。第二个 then() 返回了一个字符串,那么它返回的 Promise 就会用这个字符串来实现。

可是,如果我们在 then() 里面返回的不是简单的东西,而是另一个 Promise 呢?🤔 这样会怎么样呢?它返回的 Promise 会不会跟着这个 Promise 的状态走呢?

如果Promise中返回Promise

有时候,我们需要在网上找两次东西。比如说,我们想知道某个明星的生日,然后再根据生日查他的星座。这样,我们就要先发一个网络请求,拿到明星的生日,然后再发另一个网络请求,查他的星座。我们不能一次就把两个请求都发出去,因为我们要等第一个请求的结果才能发第二个请求呀。🙄

Promise.resolve("Hello world!")
  .then(response => ({
   name: response }))
  .then( repos => Promise.resolve({
   
                                    name: repos.name,
                                    description: 'yeahhhhhhhhhhhhhhhhhhhhhhhh~'
                                }))
  .then( repoInfo => {
   
        console.log("Name: ", repoInfo.name);
        console.log("Description: ", repoInfo.description);
    })
  .catch(error => console.error(error));

上一个例,还记得吗,我们用 Promise.resolve 返回了一个字符串,然后用这个字符串再做了一次 Promise.resolve,最后拼出了一个对象。

你有没有发现这里有点不一样的地方?🤔 我们在 then 里面返回了一个 Promise,而不是像以前那样返回一些简单的东西。

这就好比你和你的朋友去吃冰淇淋,你要在香草和巧克力之间选一个。你的朋友还没决定,你就懒得想了,就说:“你选什么我就吃什么。”这样你就跟着你朋友走了。如果他选了巧克力,你就吃巧克力🍫。如果他选了香草,你就吃香草🍦。

同理,第二个 then 也不会自己决定它的状态,而是跟着里面的 Promise 走。如果里面的 Promise 还在等待,第二个 then 也会等待😴。如果里面的 Promise 拿到了一个值,第二个 then 也会拿到同样的值😁。

所以,第二个 then 就相当于一个 已实现的 Promise

什么是 已实现的 Promise

已实现的 Promise 就是已经有结果的 Promise,或者是跟着别的 PromisePromise。这样的 Promise,你再怎么想要改变它的状态,它都不会理你。😎

什么是 未实现的 Promise

如果你想要改变一个 Promise 的状态,它还会听你的话,那么它就是 未实现的 Promise。我们之前看过的那些例子里,我们创建的 Promise 一开始都是在等待中。我们要么给它一个值,让它实现,要么给它一个理由,让它拒绝,这样就改变了它的状态,让它不能再变了。👌

深入了解

我们来看看上一个例子里,第二个 then 是怎么变化的。当第二个 then 开始的时候,它是在等待中。这时候,它还不知道自己的结果,因为它自己的 then() 里面可能会返回或者报错,让它实现或者拒绝。

但是,当它自己的 then() 里面返回了一个 Promise,也就是里面的 Promise 的时候,第二个 then 就不再自作主张了,而是跟着里面的 Promise 走。所以,第二个 then 和里面的 Promise 都还在等待中,但是现在第二个 then 的结果已经确定了,就是一个已实现的 Promise。当里面的 Promise 后来拿到了一个值,第二个 then 也会拿到同样的值。它还是一个已实现的 Promise,但是现在它已经有结果了。

所以,这就是为什么我们用 resolve 而不用 fulfilled,因为 fulfilled 一定返回的是非Promise,但 resolve 可以返回任何东西,包括 Promise 和非 Promise。👍


🎉 你觉得怎么样?这篇文章可以给你带来帮助吗?当你处于这个阶段时,你发现什么对你帮助最大?如果你有任何疑问或者想进一步讨论相关话题,请随时发表评论分享您的想法,让其他人从中受益。🚀✨

目录
相关文章
|
安全 数据安全/隐私保护
配置samba的访问密码和用户名
出于安全问题,需要为samba配置密码: $ smbpasswd -a 按提示输入想使用的密码即可 另外 /etc/samba/smb.conf 的 [global] 段必须有: security = user 如此这般,局域网的人访问你的电脑都需要以上命令设置的用户名和密码。
11802 2
|
API Windows
怎么申请 bing api key
1:打开网址 https://login.live.com/ 注册帐号并登录(点击上图中的登录按钮即可),在新窗口点击下方的“立即注册”(有帐号的可以直接登录)2:填写相关信息(推荐使用hotmail邮箱),填写完毕后点击下方的 即可PS:国家或地区请勿选择‘中国’,否则会出现‘在你的市场中未提供...
20328 1
|
12月前
|
人工智能 搜索推荐 API
Perplexica:开源 AI 搜索引擎,Perplexity AI 的开源替代品,支持多种搜索模式、实时信息更新
Perplexica 是一款开源的 AI 驱动搜索引擎,支持多种搜索模式和实时信息更新,适用于个人、学术和企业等不同场景。
1160 6
Perplexica:开源 AI 搜索引擎,Perplexity AI 的开源替代品,支持多种搜索模式、实时信息更新
|
搜索推荐 安全 API
|
编解码 人工智能 文字识别
阶跃星辰开源GOT-OCR2.0:统一端到端模型,魔搭一站式推理微调最佳实践来啦!
GOT来促进OCR-2.0的到来。该模型具有580百万参数,是一个统一、优雅和端到端的模型,由高压缩编码器和长上下文解码器组成。
阶跃星辰开源GOT-OCR2.0:统一端到端模型,魔搭一站式推理微调最佳实践来啦!
|
人工智能 Linux Docker
一文详解几种常见本地大模型个人知识库工具部署、微调及对比选型(1)
近年来,大模型在AI领域崭露头角,成为技术创新的重要驱动力。从AlphaGo的胜利到GPT系列的推出,大模型展现出了强大的语言生成、理解和多任务处理能力,预示着智能化转型的新阶段。然而,要将大模型的潜力转化为实际生产力,需要克服理论到实践的鸿沟,实现从实验室到现实世界的落地应用。阿里云去年在云栖大会上发布了一系列基于通义大模型的创新应用,标志着大模型技术开始走向大规模商业化和产业化。这些应用展示了大模型在交通、电力、金融、政务、教育等多个行业的广阔应用前景,并揭示了构建具有行业特色的“行业大模型”这一趋势,大模型知识库概念随之诞生。
155945 30
|
弹性计算 固态存储 数据可视化
阿里云服务器价格表(收费标准报价)
阿里云ECS云服务器价格是用户关心的,新手站长来说说阿里云服务器官方报价及优惠折扣后的价格,详细如下: 阿里云服务器价格组成 新手站长先介绍云服务器官方报价(包括按量付费和包年包月的价格),然后再分享优惠活动中云服务器优惠价格。
50728 0
|
Linux
一切配置正确,无法访问samba共享目录,提示没有权限的一个案例
一切配置正确,无法访问samba共享目录,提示没有权限的一个案例
1919 0