JavaScript Promises && Fetch

javascript promises && fetch

承诺

餐厅

javascript 中的 promise 只是一个待处理的任务。这就像在餐厅点餐一样:当您下订单时,服务员会承诺为您送上您点的食物。食物端上桌后,承诺就兑现了。如果您订购的食物因厨房缺少关键原料而无法提供,那么您可以在其他地方吃饭。

这都是异步的。当您坐在桌旁时,您可能正在与朋友聊天或滚动手机。您暂停正在做的事情,以便可以向服务员下订单,然后返回到之前正在做的事情。

javascript promise 的工作方式类似。由于 javascript 是单线程的,promise 允许 javascript 引擎在等待某些操作完成时继续执行其他任务。

javascript

promise 是一种特定类型的对象。所有的承诺都以待处理状态开始。 promise 中的回调函数称为 executor,定义何时解析或拒绝 promise。

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

创造一个承诺:

const order = new promise((resolve, reject) => {  if ( fooddelivered) {    resolve('eat food');  } else {    reject('find another restaurant');  }})

使用承诺

order  // wait for the asynchronous value to be fulfilled  .then(value => console.log(value))  // handle rejection  .catch(error => console.log(error))  .finally(() => console.log('all done'));

拿来

fetch 是 javascript 中的一个内置函数,返回一个承诺。它发出 http 请求并允许您使用 .then() 和 .catch() 异步处理响应。

使用 fetch()

fetch('url')  .then(response => response.json())  .then(data => console.log(data))  .catch(error => console.log(error))  .finally(() => console.log('all done');

调用堆栈和事件循环

调用堆栈管理同步任务,跟踪它们的执行顺序。这相当简单:任务按照编写的顺序执行。

但是,异步任务由事件循环处理。事件循环允许异步代码乱序执行,让 javascript 引擎无需等待即可继续处理其他任务。

例子

这将如何执行?

console.log("console log first!");settimeout( _ => console.log("set timeout second!"), 0);promise.resolve().then(() => console.log("promise third"));console.log("console log last!!!");

您可能期望它会按顺序执行,但事实并非如此。 javascript 事件循环以不同的方式处理这些指令。
结果其实是这样的:

> console log first!> console log last!!!> promise third> set timeout second!

为什么?

事件循环重新安排执行优先级:

同步任务(如 console.log(“console log first!”) 和 console.log(“console log last!!!”))会按照它们出现的顺序立即执行。微任务(例如 promise 回调)被赋予下一个优先级,并在任何其他异步任务之前执行。宏任务(如 settimeout)最后处理,即使超时设置为零。

这允许 javascript 引擎异步工作,执行其他任务,而无需等待所有操作立即完成。

unsplash 上安德鲁·彼得罗夫 (andrew petrov) 的封面照片

以上就是JavaScript Promises && Fetch的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 15:28:11
下一篇 2025年12月13日 20:52:48

相关推荐

  • 如何使用 JavaScript 和 Python 生成 RSA 密钥

    在当今的数字时代,确保敏感信息的安全至关重要。 rsa 是最广泛使用的加密技术之一,它通过允许安全通信和数据保护来帮助实现这一目标。如果您是想要学习如何生成 rsa 密钥对的初学者,本教程将指导您通过 javascript 和 python 完成该过程。 什么是 rsa? rsa(rivest-sh…

    2025年12月19日
    000
  • React 基础知识~useRef/ 视频播放

    useref 是跟踪 dom 元素状态的 react hook 之一。 我们还可以使用这个钩子来控制 dom 元素的状态。 ・src/example.js import { useRef, useState } from “react”;const Video = () => { const …

    2025年12月19日
    000
  • 创建您自己的 npm 库

    介绍 react.js、three.js 等我们平时使用的优​​秀库其实都可以自己创建。我发布这篇文章是对加拿大一所大学创建图书馆课程的回顾。 先决条件 node.js 必须可用。安装 node.js 即可使用 npm。 将您自己的库发布到 npm 项目设置 首先,创建一个 npm 帐户。 npmj…

    2025年12月19日 好文分享
    000
  • 你好,Js 情人,

    抽象数据类型(ADT),顾名思义,是对数据结构的抽象理解。 ADT 是通过其行为和特征来定义的,特别是可以存储哪些数据、可以对此数据执行的操作以及这些操作的行为。例如,堆栈和队列可以使用由节点或数组组成的链表在内部实现。然而,堆栈的主要功能是后进先出(LIFO)数据结构,而队列的主要功能是先进先出(…

    2025年12月19日
    000
  • 在 JavaScript 中生成数字范围

    生成一个整数数组,并用从起始数字开始到结束数字结束的连续值填充它。 解决方案 function range(start, end) { const rangearray = array.from( {length: math.ceil(end – start + 1)}, (_, i) => …

    2025年12月19日
    000
  • VShell 工具的 Git Rebase 和代码重构

    本周,我有机会深入研究如何使用 git rebase,同时重构我的 vshell 工具的代码库。我的主要任务是改进代码的结构和可维护性,同时遵守 dry(不要重复自己)原则,这对于使代码更具可读性、可维护性和更易于调试至关重要。此外,我遵循了重构目录中概述的各种重构模式,例如提取函数、提取类和重命名…

    2025年12月19日
    000
  • 网页设计中的过度架构

    我最近在 X 上读到了 @justinfagnani 的一篇文章,内容是: “Lit 不是框架。浏览器才是框架。” 这让我思考了近年来我们如何构建网络。 在相当长的一段时间里,如果您了解 HTML、CSS 和 JavaScript,那么您确实不需要框架来构建 Web 应用程序。最多,您可能会使用一些…

    2025年12月19日
    000
  • JavaScript 字符串操作:如何使用拆分、反转和连接

    介绍 在本文中,我们将了解三个 javascript 方法:split()、reverse() 和 join()。这些方法有助于处理字符串和执行反转文本或更改单词顺序等任务。 先决条件 无需任何经验 – 只需愿意深入研究 javascript 并尝试这些方法即可。 split() 方法 …

    2025年12月19日
    000
  • Creating a Nextjs API to Convert HTML to PDF with Puppeteer (Vercel-Compatible)

    将 html 转换为 pdf 是 web 应用程序中的常见要求。在这篇博文中,我们将探索如何创建一个 next.js api 路由,使用 puppeteer 将 html 转换为 pdf,并确保它在部署到 vercel 时正常工作。 挑战 虽然 puppeteer 是一款功能强大的 html 到 p…

    2025年12月19日
    000
  • 了解如何从头开始构建人工智能辅助博客

    在指南中您将学到: 如何创建 seo 友好的开源 Nuxt 实例如何使用开源节点管理框架 AdminForth 设置管理面板如何将openai插件添加到adminforth如何在单个 Docker 容器中捆绑 2 个实例(nuxt + 节点管理)如何自动生成一个 EC2 实例并将 docker 容器…

    2025年12月19日
    000
  • 如何在Bootstrap中进行用户列表UI设计?

    用户列表是一种常见的界面元素,用于显示系统中的用户列表。在 bootstrap 中,您可以使用各种布局和样式选项来设计用户列表的外观。 如何使用 html 和 css 制作用户列表 在 bootstrap 中创建用户列表的一种方法是使用 和 元素来创建已使用项目的无序列表。然后,您可以使用 boot…

    2025年12月19日
    000
  • 使用 JavaScript 添加给定整数的素数总和

    编写一个函数,以正整数为参数,并显示小于或等于它的所有素数之和。 解决方案 // define a function named addprimesum that takes a single parameter ‘number’function addprimesum(number) { // i…

    2025年12月19日
    000
  • 如何安装和使用 NVM 管理多个 Nodejs 版本

    介绍 高科技爱好者,大家好! 欢迎阅读有关使用适用于 windows 的节点版本管理器 (nvm) 的分步指南!如果您曾经面临过跨不同项目管理多个 node.js 版本的挑战,那么 nvm 就是您需要的工具。它简化了流程,让您可以轻松地在 node.js 版本之间切换并保持开发环境井井有条。 读完本…

    2025年12月19日
    000
  • 迁移 WooCommerce 网站时要记住的事情

    迁移 WooCommerce 网站可能是一项复杂的任务,但通过正确的准备和策略,您可以使该过程变得无缝。无论您是要迁移到新主机还是创建暂存环境,都不应忽视一些关键步骤。 在本文中,我们将讨论要记住的基本事项,以确保顺利迁移并避免停机。 1. 备份您的网站 在开始任何迁移之前,第一步应该始终是创建网站…

    2025年12月19日
    000
  • Hacktoberfest week 1

    黑客活动的第一周是上周。我的第一次黑客啤酒节,我不会撒谎。我主要是紧张。虽然为开源项目做出贡献的概念令人兴奋,但在 4 周内做出 4 个开源贡献且难度不断增加有点令人生畏。 第一组是找到第一个问题(简单)。我不想粉饰它,与我的第一个公关相比,这是最难的部分。经过大量浏览才发现问题。由于大多数问题并不…

    2025年12月19日
    000
  • 如何使用 ESLint 规则使 JavaScript 错误处理更具可读性

    简介:掌握 javascript 中的错误处理 有效的错误处理对于任何健壮的 javascript 应用程序都至关重要。它有助于快速识别问题、简化调试并增强软件可靠性。本指南深入探讨通过 eslint 改进 javascript 错误处理,eslint 是一种增强代码质量并标准化错误处理实践的工具。…

    2025年12月19日
    000
  • 如何使用 Tailwind CSS 和 JavaScript 创建圆形菜单

    大家好,今天我们将使用 Tailwind CSS 和 JavaScript 创建一个圆形菜单。 什么是圆形菜单?圆形菜单是一种 UI 组件,其中菜单项围绕中心按钮或点以圆形或放射状图案排列。这种类型的菜单通常用于节省空间,同时提供视觉上引人入胜的交互式导航体验。激活后,菜单项会围绕中心按钮展开为圆形…

    2025年12月19日
    000
  • 使用 Reactables 简化 RxJS

    介绍 rxjs 是一个功能强大的库,但众所周知,它的学习曲线很陡峭。 该库庞大的 api 界面,再加上向反应式编程的范式转变,可能会让新手不知所措。 我创建了 reactables api 来简化 rxjs 的使用并简化开发人员对反应式编程的介绍。 例子 我们将构建一个简单的控件来切换用户的通知设置…

    2025年12月19日
    000
  • 使用 JavaScript 构建“谁想成为百万富翁”

    根据热门问答节目“谁想成为百万富翁”创建游戏是练习 javascript 技能同时构建有趣且互动的游戏的绝佳方法。这篇博文将引导您了解如何构建这款游戏,包括计时器、生命线和评分系统。 游戏的主要特点多项选择题:玩家可以从四个选项中选择答案。计时器:玩家有 30 秒的时间回答每个问题。生命线:玩家可以…

    2025年12月19日
    000
  • JavaScript 提升解释以提高您的编码技能

    javascript 是一种经常会让新手感到困惑的语言。其中一种行为是提升,每个 javascript 开发人员都应该理解这一概念,以便编写更可预测的代码。在本文中,我们将探讨什么是提升、它如何与变量和函数配合使用,以及如何避免与之相关的陷阱。 什么是提升? 提升是指 javascript 将声明(…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信