Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 将承诺的返回值赋给react中的外部变量_Reactjs_Ionic Framework_Es6 Promise_Ionic React - Fatal编程技术网

Reactjs 将承诺的返回值赋给react中的外部变量

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 =>

我希望你身体健康。 我正在使用ionic和react开发一个简单的移动应用程序。我正在使用sql数据库,为此我创建了用于用户注册和登录的Api。每当用户登录时,应用程序都使用本地存储存储用户会话。[存储会话的代码]

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;没问题;)如果有用的话,你能给我的答案投票吗?