当前位置:网站首页>遍历await方法的区别:以for和forEach为例
遍历await方法的区别:以for和forEach为例
2022-08-04 21:47:00 【新生代农民工官方认证码农小拽】
场景举例
先简单了解一下遍历await的应用场景,有助于增进对遍历方法区别的了解。
比如我有一组学生名单
const studentNames = ['dilireba', 'zhangsan', 'xiaoming']
现在需要根据学生姓名到获取到数据库中对应的学生信息,
数据库查询是异步的,
此时就需要用到遍历await来查询
方法介绍
遍历方法目前有四个比较常见的:
forfor ... of ...forEach重写forEach
百度可自行查询详细介绍。
区别
在此处以for和 forEach为例。
先从两者的遍历结构说起:
for:
const getStudentDetails = async () {
for(let i = 0; i < studentNames.length; i++) {
let s = await mongodb.find(...)
}
}
forEach:
const getStudentDetails = async () => {
studentNames.forEach(async item => {
let s = await mongodb.find(...)
})
}
可以看到,for属于同步操作,而forEach中的遍历过程是在回调函数中的,
也就是异步的。
很显然, for在遍历后,可以直接得出想要的结果,而forEach是不行的。
举个例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script> function test() {
return new Promise((resolve, reject) => {
resolve(111) }) } const arr = [1, 2, 3] const arr1 = [] const arr2 = [] async function fn1() {
for(let i = 0; i < arr.length; i++) {
let r = await test() arr1.push(r) } // --> 这里打印的结果,就是想要得到的结果 console.log('fn1-arr1: ', arr1) } fn1() async function fn2() {
arr.forEach(async item => {
let r = await test() arr2.push(r) console.log('arr2: ', arr2) }) // --> 这里打印的arr2是[] console.log('fn2-arr2: ', arr2) } fn2() </script>
</body>
</html>
边栏推荐
- buu web
- Altium Designer 19.1.18 - draw polygons copper hollow out, for the cursor just capture solutions
- Flutter 实现背景图片毛玻璃效果
- Re24:读论文 IOT-Match Explainable Legal Case Matching via Inverse Optimal Transport-based Rationale Ext
- [QT] Implementation of callback function
- 开发deepstram的自定义插件,使用gst-dseaxmple插件进行扩充,实现deepstream图像输出前的预处理,实现图像自定义绘制图(精四)
- 零基础都能拿捏的七夕浪漫代码,快去表白或去制造惊喜吧
- docker 搭建mysql 主从复制
- JdbcTemplate概述和测试
- How to solve the problem that the alarm information cannot be transmitted after EasyGBS is connected to the latest version of Hikvision camera?
猜你喜欢

The upgrade and transformation plan of the fortress machine for medium and large commercial banks!Must see!

ue unreal 虚幻 高分辨率无缩放 编辑器字太小 调整编辑器整体缩放

Codeforces Round #811 (Div. 3)

七夕特制:《牛郎会织女》

【PCBA program design】Grip dynamometer program

LayaBox---TypeScript---Problems encountered at first contact

Spss-系统聚类手算实操

Flutter 实现背景图片毛玻璃效果

Spss-一元回归实操

大势所趋之下的nft拍卖,未来艺术品的新赋能
随机推荐
Some problems with passing parameters of meta and params in routing (can be passed but not passed, empty, collocation, click to pass multiple parameters to report an error)
MySQL查询为啥慢了?
rk3399-0.0 svc命令
ES6高级-Promise的用法
2022强网杯web(部分)
CountDownLatch使用及原理
基于 Milvus 和 ResNet50 的图像搜索(部署及应用)
dotnet compress Stream or file using lz4net
【QT】回调函数的实现
基于声卡实现的音频存储示波器,可作为电磁学实验的测量仪表
[Linear Algebra 02] 2 interpretations of AX=b and 5 perspectives of matrix multiplication
信创是什么意思?涉及哪些行业?为什么要发展信创?
零基础都能拿捏的七夕浪漫代码,快去表白或去制造惊喜吧
驱动点云格式修改带来的效率提升
如何将二叉搜索树转化为一个有序的双向链表(原树上修改)
【uiautomation】微信好友列表获取(存储到txt中)
数字重塑客观世界,全空间GIS发展正当其时
unity2D横版游戏教程8-音效
Webmine Webpage Mining Trojan Analysis and Disposal
PowerBI真经连续剧