NodeJs相关内容

JS for 循环里的 await

PHPer 2024-10-06 46 0 0

结果依旧,这说明在普通的 for 循环里,程序会等待上一步迭代结束执行 await 后,再继续下一步迭代。这个和我们的预期一致,for 循环里的 async/await 是顺序执行的;同理也适用于 while、for-in、for-of 等等形式中。

之前有篇我的 blog 提到过 js 的异步发展史:从callback到promise再到async/await。async/await之后的 JS 开始允许我们以一种看似顺序执行的方式书写代码,这让入门 JS 变得更简单,但在一些复杂的场景里比如 for-loop 环境里,async/await还是会有不少坑的。

Warm up

开始前,先写个“菜篮子工程”,getVegetableNum是本文中最基础的一个异步函数——异步获取蔬菜数量:

  1. const Basket = {
  2. onion: 1,
  3. ginger: 2,
  4. garlic: 3,
  5. }
  6. const getVegetableNum = async (veg) => Basket[veg];

知识点:async是一个语法糖,表示把结果包在 Promise 里返回;该异步函数等价于

  1. function getVegetableNum (veg) {
  2. return Promise.resolve( Basket[veg] );
  3. }

OK,我们再试着异步获取三种蔬菜的数量:

  1. const start1 = async () => {
  2. console.log('Start');
  3. const onion = await getVegetableNum('onion');
  4. console.log('onion', onion);
  5. const ginger = await getVegetableNum('ginger');
  6. console.log('ginger', ginger);
  7. const garlic = await getVegetableNum('garlic');
  8. console.log('garlic', garlic);
  9. console.log('End');
  10. }

最后打印结果如下:

  1. Start
  2. onion 1
  3. ginger 2
  4. garlic 3
  5. End

await in a for loop

OK,前言到此为止。现实中开发中,上述代码枚举每一种蔬菜的方式太过冗余,一般我们更倾向于写个循环来调用getVegetableNum方法:

  1. const start = async () => {
  2. console.log('Start');
  3. const arr = ['onion', 'ginger', 'garlic'];
  4. for(let i = 0; i < arr.length; ++i>){
  5. const veg = arr[i];
  6. const num = await getVegetableNum(veg);
  7. console.log(veg, num);
  8. }
  9. console.log('End');
  10. }

结果依旧,这说明在普通的 for 循环里,程序会等待上一步迭代结束执行 await 后,再继续下一步迭代。这个和我们的预期一致,for 循环里的 async/await 是顺序执行的;同理也适用于 while、for-in、for-of 等等形式中。...

立即注册

更新于:2024-10-06 22:42:32
    您需要登录后才可以评论。 立即注册
    相关内容

    IT信息技术(information technology)的工具和内容整理

    IP 地址查询 爬虫识别(在线工具)

    关于form表单同时用两种方式传输数据的困惑

    PHP向js传数组

    js关于对齐方式display的三个属性

    nodejs puppeteer 自动化测试和采集的内容整理

    [Bug]: TypeError: page.$x is not a function

    推荐内容

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    BT磁力搜索网站汇总和找不到的资源

    什么是磁力链接,您如何使用?

    Z-Library:全球最大的数字图书馆/含打不开的解决方案/镜像

    使用V2Ray的mKCP协议加速游戏

    v2rayN已停止工作

    【车险课堂】什么是无赔款优待系数ncd,你“造”吗?