异步 IIFE 后变量未定义

Bad*_*ibo 1 javascript async-await iife

  let groupedWishlistProducts;

  (async function () {
      groupedWishlistProducts = await fetchGroupedWishlistProducts();
      console.log(groupedWishlistProducts); // logs returned value properly
  })();

  console.log(groupedWishlistProducts); // logs undefined
Run Code Online (Sandbox Code Playgroud)

为什么groupedWishlistProducts在全局范围内未定义,即使我已经在全局范围内初始化?

Nic*_*wer 5

它是未定义的,因为您还没有为其分配任何东西(还)。

事情被执行的顺序是:

  1. 声明变量
  2. 声明并开始执行 IIFE
  3. 调用 fetchGroupWishlistProducts
  4. 到达 后await,IIFE 现在返回到外部代码。
  5. 记录 groupedWishlistProducts(函数外)
  6. 一段时间后,来自 fetchGroupedWishlistProducts 的承诺得到解决,异步函数恢复
  7. 将 fetchGroupedWishlistProduct 的 promise 的结果分配给 groupedWishlistProducts
  8. 记录 groupedWishlistsProducts(函数内部)

  • #4 应该读作 *“由于异步,IIFE 现在返回一个承诺”* (2认同)