这并不难!理解 JavaScript 中的“Promise”

这并不难!理解 javascript 中的“promise”

本文内容非常适合javascript初学者。会用简单易懂的语言来描述,不用担心看不懂。

承诺,你为何存在?

promise是学习现代javascript语言不可缺少的知识点。很多人读的时候都感到很困惑。主要原因可以用一句话来概括:

代码不再从上到下执行。

一般情况下,我们写的代码都是顺序执行的,比如我们写一段从1数到3的代码。

console.log(1)console.log(2)console.log(3)

按f12打开我们浏览器的控制台,将上面的代码复制进去,回车,可以看到数字1到3按顺序打印出来了。

123

现在,如果我们有一个要求,代码的顺序不能改变,但最终打印输出的顺序必须与代码的顺序无关,可以这样做吗?

立即学习“Java免费学习笔记(深入)”;

我们想象一下,如果1、2、3分别由三个人打印,那么就非常简单了。我们只需要告诉他们同时打印数字的任务即可,打印的顺序只与任务的执行时间有关。

承诺,神奇功效

那么,我们如何将打印任务分配给三个人呢?这就是使用promise的地方。通过创建一个新的 promise 对象,我们可以将一段代码分配给一个新的“进程”,而不是在当前的“进程”上执行。注意,这里的“进程”和我们常说的操作系统进程并不相同,而只是一个抽象概念,代表一个按顺序执行代码的虚拟单元。

承诺、组装说明

正如我们刚才所说,promise它可以被视为一个新的“进程”,所以如果我们想让它执行任何代码,我们可以将其包装在一个函数中并交给它。这样代码就不会立即执行。

promise还为我们提供了两个函数,一个是resolve,另一个是reject,我们可以分别在任务完成和失败时调用。这两个函数作为参数传递给promise的内部。所以,我们可以像这样组装一个:

promise(  (resolve, _reject) => {    settimeout(() => {      console.log(1)      resolve()    }, 300)  })

这里我们使用settimeout来模拟一个耗时的任务。在实际场景中,此任务可能是读取文件、请求网络接口或等待用户输入。当任务完成后,我们调用resolve函数来表示任务已经完成。

完整代码

然后,我们按照同样的方法,promise在组装另外两个的时候,只需要向他们提供不同的打印数量和任务所需的时间即可。最后,完整的代码是这样的,大家可以尝试复制到控制台试试。

promise(  (resolve, _reject) => {    settimeout(() => {      console.log(1)      resolve()    }, 300)  })new promise(  (resolve, _reject) => {    settimeout(() => {      console.log(2)      resolve()    }, 200)  })new promise(  (resolve, _reject) => {    settimeout(() => {      console.log(3)      resolve()    }, 100)  })

最后,数字打印的顺序与任务的执行时间有关:

321

promise、并发模型

并发编程是关于如何在有限数量的cpu核心上模拟大量任务同时执行。 javascript中的promise提供了一种方便快捷的并发编程方式,以及一套处理返回值和错误值的规范。了解并熟悉这个规范后,我们可以大大提高处理并发任务的效率。

以上就是这并不难!理解 JavaScript 中的“Promise”的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1491766.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 14:14:56
下一篇 2025年12月19日 14:15:05

相关推荐

  • 我创建了一个新的开源项目

    我创建了一个可在 Linux、Windows、macOS 上使用的开源文件共享系统,称为 Polyshare,它通过本地网络工作,这意味着它不需要移动数据即可工作。 PolyShare *:快速、跨平台的本地网络文件共享 技术栈:HTML、CSS、Javascript、NodeJS状态:仍在开发中,…

    好文分享 2025年12月19日
    000
  • 每个开发人员都应该了解的高级 JavaScript 概念

    javascript 是许多开发人员日常使用的语言,但其生态系统中存在许多隐藏的瑰宝,即使是经验丰富的开发人员也可能不熟悉。本文探讨了一些鲜为人知的 javascript 概念,它们可以显着提高您的编程技能。我们将介绍诸如 代理、符号、生成器 等概念,并通过示例演示每个概念并解决问题以说明其强大功能…

    好文分享 2025年12月19日
    000
  • 使用 Nodejs 创建 ReAct AI 代理(维基百科搜索)en

    介绍 我们将创建一个能够搜索维基百科并根据收集到的信息回答问题的人工智能代理。 该 react(推理和行动)代理使用 google generative ai api 来处理查询并生成响应。 我们的代理将能够: 在维基百科上搜索相关信息。从维基百科页面中提取特定部分。对收集到的信息进行分析并制定回复…

    2025年12月19日
    000
  • React:状态 X 派生状态

    什么是派生状态?考虑文本的一种状态,然后考虑大写文本的另一种状态。 导出状态 function foo() { const [text, settext] = usestate(‘hello, za warudo!’); const [uppercasetext, setuppercasetext]…

    2025年12月19日
    000
  • 使用 JavaScript 探索生成艺术

    生成艺术是一种艺术家创建系统的技术,通常以算法的形式自动生成艺术品。这些系统可以从一组初始规则中产生无限的结果,使这个过程令人着迷且充满可能性。在本文中,我们将深入研究使用 javascript 的生成艺术世界,更具体地说,是流行的库 p5.js。 什么是生成艺术? 生成艺术依赖于创建可以生成艺术作…

    2025年12月19日
    000
  • 使用 nodeJS 从头开始​​创建 ReAct Agent(维基百科搜索)

    介绍 我们将创建一个能够搜索维基百科并根据找到的信息回答问题的人工智能代理。该 react(理性与行动)代理使用 google generative ai api 来处理查询并生成响应。我们的代理将能够: 搜索维基百科获取相关信息。从维基百科页面中提取特定部分。对收集到的信息进行推理并制定答案。 […

    2025年12月19日
    000
  • JavaScript 中 Axios 和 Fetch 的区别

    在 javascript 中,axios 和原生的 fetch api 都用于发出 http 请求,但它们在特性、易用性和功能方面存在一些差异。详细介绍如下: 1. 易于使用: axios: axios 简化了发出请求和处理响应。它自动解析 json 响应,使其更易于使用。 axios.get(‘/…

    2025年12月19日
    000
  • React Native 的故事书

    专家您好,我们都在应用程序中使用可重用组件,或者我们开发了在多个地方经常使用的自定义组件,并将逻辑分开,因此每当我们更改业务逻辑时,它都会在使用它的任何地方反映出来。如果我说向我展示您开发的组件,您需要在一个组件中导入/实现它并运行应用程序,会发生什么,对吗?有什么方法可以让我在一个地方看到所有可重…

    2025年12月19日
    000
  • JavaScript 机器学习入门:TensorFlowjs 初学者指南

    机器学习 (ml) 迅速改变了软件开发的世界。直到最近,得益于 tensorflow 和 pytorch 等库,python 仍是 ml 领域的主导语言。但随着 tensorflow.js 的兴起,javascript 开发人员现在可以深入令人兴奋的机器学习世界,使用熟悉的语法直接在浏览器或 nod…

    2025年12月19日
    000
  • 如何使用免费词典API

    unsplash 上的封面照片由 christopher gower 您是否正在开发语言学习应用程序、写作助手或任何涉及单词并需要 api 来检索单词含义的项目?免费词典 api 提供了一种免费且易于访问的方式,将语言数据合并到您的作品中。本文档将向您展示如何开始。 在此 api 文档中: 关于免费…

    2025年12月19日
    000
  • JavaScript 是同步还是异步,是单线程还是多线程? JavaScript代码是如何执行的?

    javascript 是一种同步、单线程语言,一次只能执行一个命令。仅当当前行执行完毕后,才会移至下一行。但是,javascript 可以使用事件循环、promises、async/await 和回调队列执行异步操作(javascript 默认情况下是同步的)。 javascript 代码是如何执行…

    2025年12月19日
    000
  • 如何使用 Tailwind CSS 和 JavaScript 创建虚拟键盘

    大家周一快乐!今天,我们将深入研究使用 Tailwind CSS 和 JavaScript 构建虚拟键盘。这个项目是探索 JavaScript 并了解如何应用它来创建虚拟键盘的一种有趣且实用的方式。 什么是虚拟键盘? 虚拟键盘是物理键盘的基于软件的替代品。它使用户能够在计算机或移动设备上打字,而无需…

    2025年12月19日
    000
  • React JSX 如何在幕后转换为 JavaScript

    当你编写 react 时,你会经常看到 jsx——一种在 javascript 代码中看起来像 html 的语法。但你有没有想过这段代码在浏览器中是如何运行的? 神奇之处在于:jsx 不是有效的 javascript!浏览器无法直接理解它。在幕后,像 babel 这样的工具介入将 jsx 转换(或“…

    2025年12月19日
    000
  • 我用 ays 构建了一个小反馈工具

    大家好, 首先,讲一些背景故事。我今年 18 岁,刚刚借助 Next.js (TS)、shadcn/ui 和 Supabase 构建了我的第一个 SaaS。这就是所谓的情怀 我想从一个简单的工具开始,它可能对独立黑客、开发人员和小型初创公司有用,可以收集早期用户反馈,以决定还要构建什么并解决任何问题…

    2025年12月19日
    000
  • 开发人员如何构建实时 Web 应用程序?

    在不断发展的技术世界中,实时 Web 应用程序已成为寻求增强用户参与度和简化沟通的企业的强大解决方案。这些应用程序提供即时更新和交互,使其在消息传递、游戏和电子商务等领域至关重要。对于开发人员来说,尤其是那些澳大利亚开发人员,了解构建实时应用程序的细微差别至关重要。本文将探讨创建实时 Web 应用程…

    2025年12月19日
    000
  • Cron 作业中聚合的力量和成本效益

    在开发我的 saas 产品时,我发现,对于 10k 用户,您每天需要 10,001 次查询,并定期进行数据库查询来重置积分或免费提示。通过智能聚合,无论您有 10k 还是 100k 用户,您都只需要 2 次查询! 首先,让我给您一些 mongodb 生产数据库的成本审查(10k 和 1 年): 正常…

    2025年12月19日
    000
  • React 设计模式~容器组件/不受控制的受控组件~

    不受控制的组件 这种模式意味着 react 不控制表单数据,dom 保存表单状态。 访问 dom 时,必须使用 useref 钩子设置 ref 属性。 ・src/components/uncontrol-form.jsx import react from “react”;export const …

    2025年12月19日
    000
  • 克隆 Netflix 以提升您的前端技能

    作为一名主要专注于后端的开发人员,我一直觉得我的前端技能需要一些改进。为了测试这一点,我决定通过使用 vue.js 3 和 vite 构建 netflix 克隆来挑战自己。在这篇文章中,我将分解项目结构、关键组件,并分享我的学习经验。 项目概况 目标是创建一个模仿 netflix 用户界面核心功能的…

    2025年12月19日 好文分享
    000
  • 为多租户应用程序实施 ASPNET Identity:最佳实践

    构建多租户应用程序带来了独特的挑战,特别是在管理跨多个租户的用户身份验证和授权时。在本文中,我将引导您了解如何在多租户环境中实现 asp.net identity,同时遵循最佳实践以确保可扩展性、安全性和可维护性。 什么是多租户应用程序? 多租户应用程序允许多个组织(租户)使用应用程序的同一实例,每…

    2025年12月19日
    000
  • 使用 Bash 脚本简化您的日常任务:实用指南

    Bash 脚本对于在计算机上自动执行日常操作和任务非常有用。以下是一些可以使用 Bash 脚本自动执行的常见任务示例: 文件管理: 根据特定模式一次重命名多个文件。根据特定条件移动、复制或删除文件和目录。根据文件类型或元数据将文件 https://moolah777.net/download/ 分类…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信