异步遇上立即执行函数,不立即执行了?

2024-06-11 17:28

本文主要是介绍异步遇上立即执行函数,不立即执行了?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

立即执行函数可以创建独立的作用域, 让外部无法访问作用域内部的变量,从而避免变量污染。

当把立即执行函数放在异步函数里面也应该遵循 异步代码执行顺序!!

下面的代码会先打印 aaa ,2秒后再打印 1234

// sleep模拟异步请求
function sleep() {return new Promise((resolve, reject) => {setTimeout(() => {resolve('1234');}, 2000);});}
const setMcc = async () => { // async1let res;try{ (async function() {  // async2res = await sleep(); // await2console.log('获取为:', res);})();} catch(error) {console.log(' 获取失败', error)return error;}console.log('aaa')
}; 
setMcc();

这是因为被包裹的立即执行函数里面(await2)的 await并不会等到执行完,倘若要等整个立即执行函数完,需要在外层再加 await
在这里插入图片描述

为了立即执行函数看起来像同步代码顺序那样执行,可以这样做:

下面的代码会2秒后打印 1234 ,再打印 aaa

上述代码改为:

...
const setMcc = async () => { // async1...await (async function() { // await1  async2res = await sleep(); // await2console.log('获取为:', res);})();...
}
...

或者不使用立即执行函数,直接外层的 async await 的一层

// sleep模拟异步请求
function sleep() {return new Promise((resolve, reject) => {setTimeout(() => {resolve('1234');}, 2000);});}
const setMcc = async () => { // async1let res;try{ res = await sleep(); // await1console.log('获取为:', res);} catch(error) {console.log(' 获取失败', error)return error;}console.log('aaa')
}; 
setMcc();

这篇关于异步遇上立即执行函数,不立即执行了?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
http://www.chinasem.cn/article/1051817

相关文章

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Java 中实现异步的多种方式

《Java中实现异步的多种方式》文章介绍了Java中实现异步处理的几种常见方式,每种方式都有其特点和适用场景,通过选择合适的异步处理方式,可以提高程序的性能和可维护性,感兴趣的朋友一起看看吧... 目录1. 线程池(ExecutorService)2. CompletableFuture3. ForkJoi

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注