用async-await实现类似Promise.all()的执行效果

前端同步异步-setTimeout-Promise-async-await 是JavaScript中的一个定时器函数,主要作用是在指定的延迟时间(以毫秒为单位)后执行一次给定的函数或代码段。Promise在JavaScript中用于处理异步操作的结果。它是一个对象,用于包装一个还未完成的异步操作,可以在操作完成后进行相应的结果处理。async/await是JavaScript中处理一步操作的一种更简洁、更易于理解的语法糖,它是基于Promise构建的。 阅读详情

使用函数:

awaitAll(fn1, fn2, fn3...)

async function awaitAll(...fnArr) {
  if ({}.toString.call(fnArr[0]) === '[object Array]') {
    fnArr = fnArr[0];
  }
  const fnNum = fnArr.length;
  const promiseArr = [];
  const resultArr = [];
  for (let i = 0; i < fnNum; i++) {
    promiseArr.push(fnArr[i]());
  }
  for (let i = 0; i < fnNum; i++) {
    resultArr.push(await promiseArr[i])
  }
  return resultArr;
}
测试:
function wait(ms) {return new Promise(resolve => setTimeout(() => resolve(), ms));}

async function fn1() {
  await wait(1000);
  console.log('fn1');
  await wait(1000);
  return 'fn1';
}

async function fn2() {
  await wait(3000);
  console.log('fn2');
  return 'fn2';
}

async function fn3() {
  console.log('fn3');
  await wait(2000);
  return 'fn3';
}

function fn4() {
  console.log('fn4');
  return 'fn4';
}

awaitAll(fn1, fn2, fn3, fn4).then(results => {
  console.log(results);
});
// 在3秒后,返回结果列表
JavaScript异步编程:async、await的使用 async 和 await 是在 ECMAScript 2017 (ES7) 中引入的特性,用于处理异步操作。它们允许你以一种更加简洁和同步的方式来编写异步代码。async 函数表示它会返回一个 Promise,而 await 关键字用于等待一个 Promise 解决。async 是一个函数修饰符,用于声明一个函数是异步的。调用 async 函数时,该函数会立即返回一个 Promise 对象,即使函数体内部没有显式返回 Promise,JavaScript 也会自动将函数的结果封装成 Promise 对象。 阅读详情

相关推荐

Windows 11 部署 Docker Desktop:从 WSL 报错到服务配置的完整排障实录

本文详细记录了在Windows 11上部署Docker Desktop时遇到的WSL报错问题及完整解决方案。从Hyper-V配置、BIOS设置到系统服务检查,提供了一系列实用命令和排查步骤,帮助开发者快速解决'Unexpecter WSL error'等常见问题,实现Docker与WSL2的稳定运行。

weixin_30687051的博客 122

async/await实现Promise.all()

Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array,Map,Set 都属于 ES6 的 iterable 类型)的输入,并且只返回一个Promise实例,并且输入的所有 promise 的 resolve 回调的结果是一个数组。Promise的 resolve 回调执行是在所有输入的 promise 的 resolve 回调都结束,或者输入的 iterable 里没有 promise 了的时候。

编码世界 5185

UWB定位原理详细介绍

Hello大家好我是小智,今天我来给大家介绍下超宽带的定位原理,首先我们来讲下什么是UWB技术。 超宽带(Ultra Wide Band)简称UWB,和我们熟悉的WIFI、蓝牙技术一样属于通信技术的一种,UWB是一种无线载波通信技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,其所占的频谱范围很宽,右图是一种典型的正弦载波信号图。 UWB这种技术有什么特点呢? UWB系统结构实现简单;2.具有高速的数据传输能力;3.功耗低;4.安全性高;5.多径分辨能力强;6.可用于精确定位等特点。 UWB.

qq_35699674的博客 2万+

掌握 Kotlin 协程的异步编程:async {}, await 和 awaitAll 指南

Kotlin 是一种功能强大的语言,适用于 Android 和后端开发,在 Kotlin 协程中提供了出色的异步编程支持。在本文中,我们将深入探讨 Kotlin 协程中的三个重要函数:async {}、await 和 awaitAll,它们使异步编程变得轻而易举。在 Kotlin 协程中,async {} 是一个协程构建器,它启动一个表示异步计算的新协程。通过掌握 async {}、await 和 awaitAll,您将更好地掌握开发响应式、高效和高度可扩展的应用程序,充分发挥 Kotlin 的潜力。

chuyouyinghe的专栏 5951

小程序 video 控制器外观调整_Kessil 360X Tuna Sun无线控制器使用分享

之前分享了Kessil 360X Tuna Sun开箱记录,时间关系,没来得及使用WiFi Dongle无线控制器。昨晚抽空实操了一下,做个操作记录,希望对大家有参考Kessil无线模块操作指南官方视频英文教程配中文字幕,非常详尽语速较快,重点位置可以暂停操作点击边框调出视频工具条1、拆包取控制器,保存二维码Kessil WiFi Dongle包装打开包装就能看到Kessil无线控制模...

weixin_39759060的博客 4734

《QGIS快速入门与应用基础》079:KML/KMZ格式:Google Earth兼容

KML/KMZ是专为地理可视化设计的空间数据格式,原生兼容Google Earth,支持点线面要素标注与多媒体集成。KML为XML文本格式,KMZ是其压缩版本。该格式优势在于可视化表现力强、跨平台共享便捷,适合地理标注、路线分享等场景,但存在属性支持弱、大数据量处理效率低等局限。QGIS中可便捷加载和导出KML/KMZ数据,需注意编码设为UTF-8、勾选"导出样式"以保留可视化效果。建议中小规模标注数据使用KMZ格式,确保关联资源完整,提升共享效率。

LuckyHanMo的博客 773

【JS Promise, Promise.all 与 async/await用法详解】

Promise 与 async/await 使用与区别

lizhengze1117的博客 3412

Cesium中级开发教程之二十二:视锥体

教程示例网站:https://thomaz529.github.io。

883

【深入理解Kotlin协程】协程作用域、启动模式、调度器、异常和取消【使用篇】

当我们创建一个协程的时候,都会需要一个 CoroutineScope ,我们一般使用它的 launch 或 async 函数去进行协程的创建。 CoroutineScope 会跟踪它使用 launch 或 async 创建的所有协程。您可以随时调用 scope.cancel() 以取消正在运行的协程。不过,与调度程序不同,CoroutineScope 不运行协程,它只是确保您不会失去对协程的追踪。为了确保所有的协程都会被追踪,Kotlin 不允许在没有使用 CoroutineScope 的情况下

川峰的博客 4387

Python爬虫实战:用最新技术高效下载摄影网站图片

本文将深入探讨如何利用Python最新技术栈构建一个功能完整的摄影网站图片爬虫。我们将使用异步编程、智能反爬策略和现代化工具,实现高效、可靠的图片下载系统。高性能异步架构:使用asyncio实现高并发下载智能反爬策略:支持多种反爬措施和浏览器模拟多网站适配:可解析多种摄影网站结构数据管理:完整的下载记录和统计功能扩展性强:支持代理、分布式等高级功能用户友好:提供进度显示和详细日志。

2201_76125261的博客 1645

基于OpenCV的实时疲劳检测系统实现

本文介绍了一个基于OpenCV的实时疲劳检测系统,使用Python实现。系统通过Haar级联分类器检测人脸和眼睛,计算眼睛宽高比(EAR)和PERCLOS(眼睛闭合时间比例)来评估疲劳程度,分为4个等级:正常、轻度、中度和重度疲劳。核心代码包含人脸眼睛检测、疲劳评估和可视化显示功能,具有实时性、稳定性和直观的视觉反馈。系统可通过摄像头实时监控驾驶员状态,为疲劳驾驶预警提供简单有效的解决方案。

weixin_62135607的博客 233

async、await及Promise.all()、Promise.race()

async、await Promise.all()、Promise.race()

Alone_Endeavor的博客 510

AI Agent Harness内容审核:生成内容合规

在过去的几年里,生成式人工智能(Generative AI)技术取得了爆炸性的发展。从 GPT-4、Claude 这样的文本生成模型,到 Midjourney、Stable Diffusion 这样的图像生成工具,再到 Sora 这样的视频生成模型,AI 已经具备了媲美甚至超越人类的内容创作能力。然而,技术是一把双刃剑。随着生成式 AI 的普及,内容安全与合规风险也呈指数级增长。

AI架构师小马 300

async原理解析

async其实就是 Generator的语法糖,看本篇文章之前可以先看一下上一篇文章 Generator函数。理解 Generator就容易理解为什么说async是异步编程的完美解决方案了。 目录 async函数 async函数原理 常见的关于async的笔试题 async函数 const fs = require(‘fs’); const readFile = function (fileNam...

1045

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

前端面试题 什么时候用promise.all 什么时候用async和await

碰见这样的面试题 考验的还是我们对上面俩者的理解程度 promise 是用来解决 回调地狱的好方法 将异步的执行代码体 封装到一个函数体内部 返回一个成功的方法 通过 .then()来达到同步的效果 常见的promsie用法是 return new Promise((resolve,reject)=>{ setTimeout(()=>{resolve(...

业余前端的职业经历 6887

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Promise、async、await用法——前端异步串行执行,循环串行执行

前言 本文只是个人因需求在开发后的总结,更偏向于应用方面,对于promise、async的基础就不赘述了。相关文章网络上也很多,有需要的朋友也可以参考一下,建议有一点点相关知识后再阅读更容易理解。 1.先热下身—promise的基础用法—异步函数串行执行 其实就算不使用promise,通过在异步函数里嵌套下一个要执行的异步函数也可以达到同样的效果。但使用promise代码更灵活,代码可读性也好些。...

a5552157的博客 2744

async...await用法全解

async...await用法全解

一只小绵羊 2万+

JS 异步 Promise、Async、await详解

可以看到,首先打印了Test Demo,3秒后执行了第一各Promise里的内容,执行完第一个Promise里的内容后,再过2秒执行了第二各Promise里的内容。可以看到,首先打印了Test Demo,3秒后执行了第一各Promise里的内容,执行完第一个Promise里的内容后,再过2秒执行了第二各Promise里的内容。(2) Promise.race() 中Promise序列中第一个执行完毕的是通过,则认为是成功,如果第一个执行完毕的Promise是rejected,则认为失败;

qq_50909707的博客 5373

async/await详解

async/await是ES20717引入的,主要是简化Promise调用操作,实现了以异步操作像同步的方式去执行,async外部是异步执行的,同步是await的作用。

编码世界 4450

什么时候用promise.all 什么时候用async和await

什么时候用promise.all什么时候用async和await? 考验的还是我们对上面俩者的理解程度 promise 是用来解决回调地狱的好方法:将异步的执行代码体封装到一个函数体内部,返回一个成功的方法 通过.then()来达到同步的效果。 常见的promsie用法是: return new Promise((resolve,reject)=>{ setTimeout(()=>{resolve('a')},3000) //异步代码 }).then(res=>{console.

weixin_54362381的博客 2488

setTimeout、Promise、Async/Await 的区别

1.SetTImeout 注意setTimeout是异步执行函数 , 当js主线程运行到此函数时,不会等待settimeout中的回调函数 ,会直接进行settimeout下面的语句(尽管setTimeout的延迟时间为0时) 当执行完当前事件循环的时候,settimeout中的回调会在下次(或者某一个)事件循环中被执行 例子1: console.log('setTimeout...

宫晨的专栏 6556

彻底理解Promise和async/await

promise

weixin_49035434的博客 2038

Java有类似JavaScript的async/await吗?从Promise到虚拟线程,一次聊透

意思就是,如果数据库还没查完,代码跑到这儿就会死死地卡住,动弹不得,直到结果回来。的舒服劲儿印象深刻。它能让你用写同步代码的方式,去处理恶心的异步逻辑。本质上还是在用Promise,它就是一套“外套”,让Promise用起来更像同步代码,是目前写异步代码最推荐的方式。还会返回一个新的Promise,所以你可以像链条一样把好几个异步操作串起来,解决了早期“回调地狱”的问题。这玩意儿太底层了,跟自己组装电脑一样,灵活是灵活,但一不小心就搞出各种线程安全问题,心累。,功能非常强大,彻底改变了Java的异步写法。

冷脸萌萌的技术实践 878

async/await-Promise-让异步操作同步执行

首先,要明白异步跟同步,参考下方博客的案例介绍:async/await让异步操作同步执行的方法详解 - dreamw - 博客园 (cnblogs.com)https://www.cnblogs.com/wl-blog/p/15136449.html function fn1(){ console.log(111) setTimeout(function(){ console.log('wait me 3000') },3000) } function fn2(){ console.log(

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 4832

详解promise、async、await以及在小程序云函数中使用promise

首先解释一下什么是同步、什么是异步 同步:做饭的时候,先烧水,等水烧好的时候再去做菜 异步:做好的时候,先烧水,等待水烧好的过程中,同时去做菜 使用promise的目的就是为了避免 callback hell(地狱回调)例如: setTimeout(() => { console.log(1) setTimeout(() => { consol...

前端李小白的博客 5890

Promise对象的使用与async和await

Promise 是 JavaScript 中的一种编程模式,用于处理异步操作。它提供了一种更加优雅的方式来组织异步代码,避免了回调地狱(callback hell)的问题,并且使得错误处理更加一致。Promise 对象代表了一个最终会在未来完成(或失败)的异步操作,**所以在 Promise 返回给调用者的时候,操作往往还没有完成,并且其结果值未知。

緑水長流*z 994
上一篇: 模拟器+Fiddler抓包安卓应用
下一篇: Express异常捕获
平仄_csdn
博客等级 码龄10年 11粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值