Reactjs 将承诺的返回值赋给react中的外部变量
我希望你身体健康。 我正在使用ionic和react开发一个简单的移动应用程序。我正在使用sql数据库,为此我创建了用于用户注册和登录的Api。每当用户登录时,应用程序都使用本地存储存储用户会话。[存储会话的代码]Reactjs 将承诺的返回值赋给react中的外部变量,reactjs,ionic-framework,es6-promise,ionic-react,Reactjs,Ionic Framework,Es6 Promise,Ionic React,我希望你身体健康。 我正在使用ionic和react开发一个简单的移动应用程序。我正在使用sql数据库,为此我创建了用于用户注册和登录的Api。每当用户登录时,应用程序都使用本地存储存储用户会话。[存储会话的代码] Storage.set({ key: 'currentUser', value: username }); 否问题在于:[用于检索存储值的代码] let session; Storage.get({ key: 'currentUser' }) .then(p1 =>
Storage.set({
key: 'currentUser',
value: username
});
否问题在于:[用于检索存储值的代码]
let session;
Storage.get({ key: 'currentUser' })
.then(p1 => {
const p2 = p1.value;
const p3 = p2.replace(/"/g, "");
session = p3;
});
console.log(session) //This gives 'undefined'
此处变量(p3)包含实际用户名。但当我把它的值赋给session变量时。会话变量变得未定义。我不知道如何从这个函数中获取会话值。请帮我把这个修好。谢谢我想你不能。包装在
then()
中的代码是异步执行的,这意味着您不知道首先执行的是什么:session=p3
或console.log(session)
。
也许这个皇后会有帮助?
Javascript是一种异步语言。在这里,您的请求在到达之前需要一些时间,这就是为什么JavaScript将忽略函数
then()
。您可以使用模拟API调用的setTimeout
函数查看此过程:
let会话;
设置超时(()=>{
//这将在500毫秒后执行,但是javascript继续执行并执行另一个控制台日志
会话=‘测试’;
console.log(会话);
}, 500);
console.log(session)//首先执行
那么,在ionic中存储和检索会话的最佳方法是什么?您是否使用react?是的,我正在使用react with ionic(6.1)您需要以某种方式管理应用程序的状态。也许把这段代码放在react组件中,然后使用useState钩子来存储状态?谢谢你的回答。在ionic中有没有其他存储和检索会话的方法?@AwaisKhalid;没问题;)如果有用的话,你能给我的答案投票吗?