当前位置: 首页 > news >正文

异步javascript

官方文档

简介

异步 JavaScript 是指程序的执行流程不是严格按照代码的顺序进行的,而是允许某些操作在不阻塞主线程的情况下并行执行。这与同步执行模式形成鲜明对比,在同步执行中,程序会一直等待某个操作完成才会继续向下执行。

异步 JavaScript 的主要体现形式

事件监听器

事件监听器允许程序在特定事件发生时执行回调函数,而不需要阻塞主线程。下面是一个简单的事件监听器示例:

// 点击按钮时执行回调函数
document.getElementById('myButton').addEventListener('click', function() {console.log('Button clicked!');
});console.log('This message will be logged first.');

在这个例子中,即使点击按钮的操作还没有完成,主线程也会继续向下执行,打印出"This message will be logged first."。

定时器函数

setTimeout() 和 setInterval() 函数允许程序在指定的延迟后执行某个函数,而不会阻塞主线程的执行。下面是一个使用 setTimeout() 的示例:

console.log('This message will be logged first.');setTimeout(function() {console.log('This message will be logged after 2 seconds.');
}, 2000);console.log('This message will be logged second.');

在这个例子中,尽管 setTimeout() 函数需要 2 秒钟才能执行完毕,但主线程仍然可以继续向下执行,打印出"This message will be logged second."。

AJAX 请求

AJAX 技术允许程序在不刷新页面的情况下向服务器发送异步请求并获取数据。下面是一个使用 AJAX 的示例:

// 使用 XMLHttpRequest 对象发送 AJAX 请求
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data', true);
xhr.onload = function() {if (xhr.status === 200) {console.log('Response data:', xhr.responseText);} else {console.error('Error:', xhr.statusText);}
};
xhr.onerror = function() {console.error('Network error.');
};
xhr.send();console.log('This message will be logged first.');

在这个例子中,AJAX 请求是异步执行的,主线程不会因为等待请求完成而被阻塞。

Promise 和 async/await

Promise 对象和 async/await 语法糖为异步编程提供了更加优雅和易于管理的方式。下面是一个使用 Promise 的示例:

function fetchData() {return new Promise((resolve, reject) => {// 模拟一个异步操作,如网络请求setTimeout(() => {resolve({ data: 'Hello, async world!' });}, 2000);});
}fetchData().then((result) => {console.log(result.data); // 输出: "Hello, async world!"}).catch((error) => {console.error('Error:', error);});console.log('This message will be logged first.');

在这个例子中,fetchData() 函数返回一个 Promise 对象,模拟了一个异步操作。在 Promise 的 then() 方法中,我们处理了异步操作成功的结果,在 catch() 方法中,我们处理了异步操作失败的情况。值得注意的是,尽管异步操作需要 2 秒才能完成,但主线程仍然可以继续执行其他任务,如最后一行的输出。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • idea编码问题:需要 <标识符> 非法的类型 、需要为 class、interface 或 enum 问题解决
  • 自动化测试断言
  • 中介子方程十六
  • 【微信小程序开发实战项目】——如何去申请腾讯地图账号和在微信公众平台,配置request路径和添加地图插件
  • [Kubernetes] etcd 单机和集群部署
  • es6基础语法
  • docker-ce 和 docker-ee介绍版本介绍
  • MySQL数据库管理(一)
  • 2024年6月13日随笔
  • 拥抱数字世界|AI在娱乐行业的应用,娱乐新纪元已到来
  • 浅谈Web开发的三大主流框架:Angular、React和Vue.js
  • 京准电钟|基于纳秒级的GPS北斗卫星授时服务器
  • SSM名城养老院管理系统-计算机毕业设计源码03948
  • c++_0基础_讲解1 认识c++
  • 判断当前设备为移动端自适应 平板和pc端为375移动端样式
  • ----------
  • ERLANG 网工修炼笔记 ---- UDP
  • JavaScript设计模式与开发实践系列之策略模式
  • oldjun 检测网站的经验
  • Redis字符串类型内部编码剖析
  • 分布式任务队列Celery
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 三分钟教你同步 Visual Studio Code 设置
  • 使用common-codec进行md5加密
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 我从编程教室毕业
  • 项目管理碎碎念系列之一:干系人管理
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 学习笔记TF060:图像语音结合,看图说话
  • postgresql行列转换函数
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #define、const、typedef的差别
  • ( 10 )MySQL中的外键
  • (0)Nginx 功能特性
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (论文阅读11/100)Fast R-CNN
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (原創) 物件導向與老子思想 (OO)
  • (转)memcache、redis缓存
  • (转)scrum常见工具列表
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .Net中wcf服务生成及调用
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149