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

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

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

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

// sleep模拟异步请求
function sleep() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('1234');
        }, 2000);
    });
  }
const setMcc = async () => { // async1
  let res;
  try{ 
    (async function() {  // async2
      res = await sleep(); // await2
      console.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  async2
    res = await sleep(); // await2
    console.log('获取为:', res);
  })();
  ...
}
...

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

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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-11 15:36:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-11 15:36:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-11 15:36:03       87 阅读
  4. Python语言-面向对象

    2024-06-11 15:36:03       96 阅读

热门阅读

  1. 【Anaconda】 anaconda常用命令总结

    2024-06-11 15:36:03       32 阅读
  2. 分治思想 +各种数据结构(线段树,归并排血)

    2024-06-11 15:36:03       26 阅读
  3. adb检测系统是否使用生产秘钥进行签名

    2024-06-11 15:36:03       34 阅读
  4. ptx学习

    2024-06-11 15:36:03       27 阅读
  5. Jmeter函数二次开发说明

    2024-06-11 15:36:03       30 阅读
  6. SpringMVC

    SpringMVC

    2024-06-11 15:36:03      29 阅读
  7. ls命令(Linux)

    2024-06-11 15:36:03       36 阅读
  8. 徐州服务器租用的费用如何?

    2024-06-11 15:36:03       32 阅读
  9. i18next国际化(react)

    2024-06-11 15:36:03       29 阅读
  10. qt+ffmpeg实现视频转码功能(亲测好用)

    2024-06-11 15:36:03       33 阅读
  11. TensorFlow 的基本概念和使用场景

    2024-06-11 15:36:03       29 阅读
  12. 一些科学方法的总结

    2024-06-11 15:36:03       26 阅读