Promise学习之同步与异步

2024-08-24 16:12
文章标签 学习 异步 同步 promise

本文主要是介绍Promise学习之同步与异步,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、同步与异步

(一) 同步

(二) 异步

二、总结

(一) 同步

(二) 异步


前言

Java有多线程,前端有同步与异步,异步操作可以优化用户体验提高性能与响应处理并发与并行任务等等,异步操作有发送Ajax请求读文件等,当然异步操作也会带来一些问题回调地狱,那竟然有问题的产生,也就会有解决问题的方法Promise。本系列文章是关于Promise的学习,希望能够帮助大家,如有问题也就大家指出。

感谢李立超老师的讲课,理论清晰透彻,十分推荐!!!观看链接

一、同步与异步

(一) 同步

在计算机程序中,我们所编写的代码一般都是从上到下执行,上一行代码执行完了才会接着到下一行代码的执行,这也就是我们所说的同步

例子

  • 比如去餐厅吃饭,是要点餐等餐吃饭付钱离开,这些步骤都是按照顺序执行的

代码演示

console.log("1.点餐");
const current = Date.now();
console.log("2.等餐");
console.log("等餐2秒钟...");
while (Date.now() - current < 2000) {}
console.log("3.吃饭");
console.log("4.付钱");
console.log("5.离开");

(二) 异步

同步执行中一段代码执行完才会轮到下一段代码,那如果上一段代码一直执行,那下一段代码就需要一直等待,如果映射到项目中就会导致页面白屏系统无法正常操作造成用户体验不佳等问题,这时候就需要异步

例子:

  • 发送ajax请求,在请求过程中,我们可以先避开请求所需时间,继续往下,等请求响应了在进行请求的操作(拿数据、根据响应操作等等)
  • 在等餐过程中,我们做了其他事情,比如玩手机唱跳rap,去做这些事情不会去影响接下来的流程,还可以帮助我们做更多的事情

代码演示一

console.log("页面挂载");
const current = Date.now();
setTimeout(() => {console.log("发送ajax请求");console.log("等待ajax请求响应...");console.log("ajax响应完成,根据响应获取数据");}, 2000);
console.log("页面挂载完成");
console.log("用户浏览网站");

代码演示二

编写两个数的求和异步函数,然后基于请求函数的结果进行下一个请求,以此类推,而异步代码无法通过return设置返回值,需要通过回调函数去获取结果

function sum(a, b, cb) {setTimeout(() => {cb(a + b);}, 2000);
}
const result = sum(10, 20, (result) => {console.log("执行结果1", result);sum(result, 30, () => {console.log("执行结果2", result);sum(result, 40, () => {console.log("执行结果3", result);sum(result, 50, () => {console.log("执行结果4", result);sum(result, 60, () => {console.log("执行结果5", result);console.log("执行结束");});});});});
});

异步代码通过回调函数去获取结果,如果想基于结果再进行下一步计算,就需要在回调函数里面继续调用异步求和函数,这也导致了我们的代码一层嵌套一套,代码极其不美观、可读性差,这也就是我们所说的回调地狱

二、总结

(一) 同步

概念

代码按照从上到下的顺序执行,只有上一段代码执行完才会继续执行下一段代码

特点

代码从上往下执行,顺序分明

问题

  • 前面的代码不执行,后面的代码也不会执行
  • 同步代码执行会出现阻塞的情况
  • 一段代码的执行慢回影响到整个程序

(二) 异步

概念

异步执行代码,后面的代码无需等待异步代码执行完才能执行

特点

  • 不会阻塞其他代码的执行
  • 需要通过回调函数来返回结果

问题

  • 代码可读性差
  • 可调试性差

这篇关于Promise学习之同步与异步的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102963

相关文章

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal