首页 > 解决方案 > 如何从异步自执行函数访问全局窗口变量

问题描述

如何从异步自执行函数的内侧设置窗口变量。当我在 fetch 之前使用 await 时,我得到“错误:未捕获的 ReferenceError:bar 未定义”。当我删除等待时,在这种情况下,我得到了 Promise 对象。

(async function (w){

    bar = await fetch('https://jsonplaceholder.typicode.com/posts').then(()=>{
      response.json()
    }).then((data)=>{
      return data
    });

    w.bar=bar;

 })(window); 

 console.log(bar);

标签: javascriptnode.jsasync-awaitself-executing-function

解决方案


error: Uncaught ReferenceError: bar is not defined您尝试登录时正在抛出bar console.log(bar);

这是行不通的,因为您正在等待使用await关键字完成提取,因此当此行console.log(bar);到达您的变量时bar不会被拒绝,因为fetch()尚未完成并且尚未w.bar=bar;调用此行。

如果您需要在函数之外使用 fetch 的结果,请删除await关键字,然后在任何需要使用结果的地方等待 promise 完成,例如记录它:bar.then(data => console.log(data))


推荐阅读