TypeScript React下MongoDB Realm登录后app.currentUser返回null问题
问题根因
- 异步逻辑混用
async/await和嵌套then,时序控制存在隐患 - MongoDB Realm SDK的全局
app.currentUser状态更新晚于app.logIn方法的resolve时机,登录成功后会延迟1个微任务周期才会更新全局状态
解决方案
优先直接使用login方法返回的有效用户实例执行后续逻辑(包括写入自定义用户数据),可以完全规避全局状态更新延迟的问题。如果确实需要依赖app.currentUser,补充1个事件周期的等待即可。
修正后代码
async function register(app: any, userDetails: any) { try { // 完成账号注册 await app.emailPasswordAuth!.registerUser( userDetails.email, userDetails.password, ); // 登录获取已认证的用户实例 const user = await login(app, userDetails.email, userDetails.password); // 若必须使用全局app.currentUser,打开下方注释等待状态更新即可 // await new Promise(resolve => setTimeout(resolve, 0)); // console.log(app.currentUser); // 此时已不为null // 写入自定义用户数据示例,直接用返回的user实例操作,无需依赖全局状态 const mongoClient = user.mongoClient("mongodb-atlas"); await mongoClient.db("你的数据库名").collection("你的用户集合名").insertOne({ userId: user.id, nickname: userDetails.nickname, avatar: userDetails.avatar, // 其他自定义字段 }); } catch (e) { console.error("注册流程出错", e); } }
原有登录函数无需修改,逻辑可正常复用。
内容的提问来源于stack exchange,提问作者David McIntyre
相关产品推荐
相关产品推荐

