码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 通过现实生活中一个例子来理解 JavaScript Promise


    想象一下,你是一位顶级歌手,粉丝们日夜询问你即将到来的歌曲。

    您承诺在它出版时将其发送给这些粉丝。歌手给粉丝提供一份名单。他们可以填写他们的电子邮件地址,这样当歌曲可用时,所有订阅方都会立即收到它。即使出现了非常大的问题,比如工作室发生火灾,导致歌曲无法发布,他们仍然会收到通知。

    这就是我们在编程中经常遇到的事情的现实类比。

    做某事并需要时间的“生产代码”。例如,一些通过网络加载数据的代码。这就是“歌手”。

    一个“消费代码”,期望消费“生产代码”产生的结果。许多函数可能需要该结果。这些是“粉丝”。

    Promise 是一个特殊的 JavaScript 对象,它将生产代码和消费代码链接在一起。根据我们的类比:这是“订阅列表”。 “生产代码”花费它需要的任何时间来产生承诺的结果,并且“承诺”使该结果在准备好时可供所有订阅的代码使用。

    let promise = new Promise(function(resolve, reject) {
      // executor (the producing code, "singer")
    });
    
    • 1
    • 2
    • 3

    传递给 new Promise 的函数称为执行器。 当新的 Promise 被创建时,executor 会自动运行。 它包含最终应该产生结果的生产代码。 按照上面的类比:执行者是“歌手”。

    它的参数 resolve 和 reject 是 JavaScript 本身提供的回调。 这是两个原生对象。

    我们的代码只在执行器内部。

    当 executor 获得结果时,无论是早是晚,都没有关系,它应该调用以下回调之一:

    • resolve(value) — 如果作业成功完成,带有结果值。
    • reject(error) — 如果发生错误,error 是错误对象。

    总结一下:执行器自动运行并尝试执行一项工作。 尝试完成后,如果成功则调用 resolve,如果出现错误则调用 reject。

    新的 Promise 构造函数返回的 Promise 对象具有以下内部属性:

    • state — 最初是“pending”,然后在调用 resolve 时更改为“fulfilled”,或者在调用 reject 时更改为“rejected”。
    • 结果 - 最初未定义,然后在调用 resolve(value) 时更改为 value,或者在调用 reject(error) 时更改为错误。
  • 相关阅读:
    分享一个uniapp+springboot基于微信小程序的线上维修预约系统 在线维修小程序源码 lw 调试
    mysql主从&shardingsphere分库分表
    甲骨文发布适用于 MongoDB 的 Oracle Database API;Chrome 和 Edge 互相“拉踩”;树莓派驱动程序现可在 Android 上运行 | 开源日报
    Golang基础 基础数据类型 Slice切片
    尽人事,听天命,十二轮面试最终圆梦字节,记一次最难面试记录
    多种功能稻种资源 国稻种芯-何登骥:外源导入生物定向育种
    [附源码]Python计算机毕业设计SSM联动共享汽车管理系统(程序+LW)
    离线数仓 (十) --------- 数仓环境搭建
    WMS仓库信息系统仓库信息Service模块
    校园小情书微信小程序源码 | 社区小程序前后端开源 | 校园表白墙交友小程序
  • 原文地址:https://blog.csdn.net/i042416/article/details/126298256
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号