Promise-以往的异步编程模式

2024-04-05 02:28

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

要理解这个 double 函数在调度异步操作后为什么会立即退出,我们可以一步一步拆解它的执行流程。

首先,看一下 double 函数的定义:

function double(value) {setTimeout(() => setTimeout(console.log, 0, value * 2), 1000);
}

当你调用 double(3); 时,发生了以下几件事:

  1. 调用 double 函数:传递给它的值是 3
  2. 执行第一个 setTimeout:这个 setTimeout 被设置了一个延迟时间(1000毫秒或1秒)。它的回调函数是另一个 setTimeout 调用。
  3. 函数退出double 函数的执行到此结束。由于第一个 setTimeout 里面的操作是异步的,所以 double 函数不会等待它完成就直接退出了。这就是为什么说函数在调度异步操作后会立即退出。
  4. 第一个 setTimeout 的回调执行:大约1秒后,第一个 setTimeout 里的回调函数被执行。这个回调函数本身是另一个 setTimeout 调用,它立即调用 console.log 函数(延迟时间为0),并将 value * 2 的结果传递给它。
  5. 第二个 setTimeout 的回调执行:虽然延迟是0,但由于JavaScript的事件循环和任务队列的机制,console.log 函数的执行会被放入到任务队列中,等待当前执行栈清空,再执行。因此,console.log(value * 2)(即输出 6)会在第一个 setTimeout 的回调执行后尽快执行,但不会是立即执行。

总之,double 函数展示了如何通过嵌套 setTimeout 来安排异步任务。它利用JavaScript的事件循环机制,在调度异步操作(如延时调用)后立即退出。这个异步操作会在未来的某个时刻执行,但不会阻塞函数返回或后续代码的执行。

这篇关于Promise-以往的异步编程模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Go语言实现桥接模式

《Go语言实现桥接模式》桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,本文就来介绍一下了Go语言实现桥接模式,感兴趣的可以了解一下... 目录简介核心概念为什么使用桥接模式?应用场景案例分析步骤一:定义实现接口步骤二:创建具体实现类步骤三:定义抽象类步骤四:创建扩展抽象类步

C++中的解释器模式实例详解

《C++中的解释器模式实例详解》这篇文章总结了C++标准库中的算法分类,还介绍了sort和stable_sort的区别,以及remove和erase的结合使用,结合实例代码给大家介绍的非常详细,感兴趣... 目录1、非修改序列算法1.1 find 和 find_if1.2 count 和 count_if1

Redis中群集三种模式的实现

《Redis中群集三种模式的实现》Redis群集有三种模式,分别是主从同步/复制、哨兵模式、Cluster,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1. Redis三种模式概述2、Redis 主从复制2.1 主从复制的作用2.2 主从复制流程2

深入理解MySQL流模式

《深入理解MySQL流模式》MySQL的Binlog流模式是一种实时读取二进制日志的技术,允许下游系统几乎无延迟地获取数据库变更事件,适用于需要极低延迟复制的场景,感兴趣的可以了解一下... 目录核心概念一句话总结1. 背景知识:什么是 Binlog?2. 传统方式 vs. 流模式传统文件方式 (非流式)流

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

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

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

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点