如何解决async导出用户变量后跨模块引入时取值为undefined的问题
问题根因
你出现这个问题的核心错误有两个:
- 调用
b(setU)时传参是setU函数本身,没有执行该函数,你在b函数内await的是函数对象,不是setU执行后返回的Promise,自然拿不到用户对象 setU定义时需要接收Promise类型的参数u才能返回用户信息,你之前完全没有传入对应参数,就算直接执行setU()也会得到空结果
修复方案
首先确认你login()函数是异步返回谷歌用户信息的方法,调整模块2代码如下即可:
import {login,cerrar,setU} from '/js/log_principal.js' async function init() { // 先等待登录完成拿到用户信息 const loginResult = await login(); // 把登录返回的用户Promise/对象传给setU执行 const user = await setU(loginResult); // 此时可以正常拿到uid console.log(user.uid); } init();
如果你要保留原来的b函数写法,调整如下:
import {login,cerrar,setU} from '/js/log_principal.js' // 执行login拿到用户Promise,传给setU执行后得到用户信息的Promise,再传入b函数 const userPromise = setU(login()); b(userPromise); async function b(usuarioPromise){ let user= await usuarioPromise; console.log(user.uid); }
内容的提问来源于stack exchange,提问作者miguel angel Asencio
相关产品推荐
相关产品推荐

