- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
使用 ionic 应用程序验证基于 token 的身份验证,将 token 存储在本地存储中需要时间存储在它移动到下一个状态之间是任何以异步方式在本地存储中设置值的解决方案
window.localStorage.setItem('ChemistloggedInUser', JSON.stringify(data))
最佳答案
localStorage
是一个同步 API。您可以使用 Promise
对象延迟 setItem
方法的执行,为它们提供异步行为:
const asyncLocalStorage = {
setItem: function (key, value) {
return Promise.resolve().then(function () {
localStorage.setItem(key, value);
});
},
getItem: function (key) {
return Promise.resolve().then(function () {
return localStorage.getItem(key);
});
}
};
// Demo
const data = Date.now() % 1000;
asyncLocalStorage.setItem('mykey', data).then(function () {
return asyncLocalStorage.getItem('mykey');
}).then(function (value) {
console.log('Value has been set to:', value);
});
console.log('waiting for value to become ' + data +
'. Current value: ', localStorage.getItem('mykey'));
查看它在 repl.it 上运行,因为 SO 片段不允许使用 localStorage
。
使用较新的 async
/await
语法,这个 asyncLocalStorage
可以写成:
const asyncLocalStorage = {
setItem: async function (key, value) {
await null;
return localStorage.setItem(key, value);
},
getItem: async function (key) {
await null;
return localStorage.getItem(key);
}
};
请注意,虽然上面让您立即继续执行其他代码,但一旦该代码执行完毕,访问本地存储的工作就会开始,并且会使用同一个线程。所以它不像在后台运行,与您自己的 JS 代码并行。它只是延迟 作业直到调用堆栈为空之后。在完成该作业之前,它也不会处理来自浏览器上下文的其他事件。因此,例如,它仍然会阻止 GUI。
如果您需要并行访问,那么使用 localStorage
就不走运了。例如,该 API 在 Web Workers 中不可用,否则这可能是一条出路。
您可以查看 IndexedDB API
作为备选。但是:
关于javascript - 是否有任何解决方案可以在 javascript 中以异步方式执行 localstorage setItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42921220/
我有一个适用于 Mac 和 Linux 用户但不适用于 Windows 用户的 Chrome 扩展程序。当我进入控制台并在 localStorage 中设置一个项目时,它工作正常,但是当用户尝试使用扩
当我尝试将项目设置到 tableView 中时遇到问题,有关我使用 SceneBuilder 的信息。 Main.java: public class Main extends Application
我使用下面的代码在 webstorage 对象中存储一些内容,但出现此错误: Error:-- Object doesn't support property or method 'setItem'
我的 UINavigationController 工具栏是空白的,上面没有显示任何项目。这是我的代码 self.navigationController.toolbarHidden = NO; UI
创建 JavaFX GUI 应用程序,但无法让 ListView 在我的 Controller 类上工作。这是代码: MP3.Java package mp3player; import javafx
我的团队正在进行的一个小型学校项目遇到了问题。 每当我将输入提交到本地存储时,它都会覆盖以前的本地存储项目。这个想法是稍后通过使用复选框等“合并”成员输入与任务输入。 我希望能够从本地存储中列出大量名
我有一个实现可初始化的 Controller 类,它看起来像这样: public class FileSharingController implements Initializable { priv
我是 Qt 的新手,真的需要帮助解决这个问题。我目前正在学校开展一个实践培训项目。当我使用 ui->tableWidget->setItem(.....) 但没有显示时,我被卡住了。虽然新行添加了空白
我即将在我的一个 Angular 项目中使用 Storage.setItem(),但想检查当两个单独的 Web 应用程序尝试使用相同的 key 设置存储时浏览器如何处理该场景。 之前的值是否会被覆盖?
当使用 IE11 并使用 javascript 的 localStorage 功能时,由于浏览器内的安全设置,浏览器控制台会抛出“拒绝访问”消息来阻止 javascript 的执行。 有没有办法通过
我的 ListView 适配器中有这个, public void setListItems(List data) { Log.d(tag, this.data.size() + "," + d
所以,这是我的代码。 def classMaker(csv): csv = csv.split("/n") firstLine = csv[0] csv = csv[1:]
我正在尝试使用 HTML5 本地存储做一个 super 简单的 setItem 和 getItem。它似乎只是行不通。这有效: $(document).ready(function () { lo
我正在通过 WPF 应用程序创建一个 CRUD 应用程序来学习基础知识。但是,当我调用 SetItem() 来更改 ObservableCollection 中的元素时,我遇到了“由于其保护级别而无法
这个问题在这里已经有了答案: localStorage - use getItem/setItem functions or access object directly? (5 个答案) 关闭 7
每次单击箭头时,React 状态都会保存在本地ٍ 存储中 但是当你刷新页面时,值会减少 1,因为最后的更改没有保存到本地存储 如果修改多个项目,问题将在最后按下的项目The Code is here
我正在尝试将数组存储在客户端浏览器的 localStorage 中,以便在页面加载后轻松访问内容,数组是从数据库中提取的。 我的问题是,我只能在页面重新加载并反射(reflect)在客户端后才能使用本
下面是我的函数。我可以通过 res 在 console.log 中看到一个对象: login2(){ console.log(this.user_form_value); consol
好吧,假设我在 HTML 页面中输入这两个值:20、30。 我有这两个变量,我从 HTML 页面获取值,并且工作正常,因此 BrugerFugt=20 和 BrugerTemp=30: Bru
我正在尝试创建一个使用 localStorage 的图书跟踪器应用程序。但是,当我设置一个项目时 - 发生的情况是没有给出错误消息,但它不会记录到 localStorage。这是我的代码:
我是一名优秀的程序员,十分优秀!