ionic app validationing token based authを使用して、トークンをlocalstorageに格納すると、次の状態に移行する間にトークンを格納するのに時間がかかりますが、localstorageに値を設定する非同期の方法を実行するためのソリューションです
window.localStorage.setItem('ChemistloggedInUser', JSON.stringify(data))
localStorage
は同期APIです。 setItem
メソッドの実行をPromise
オブジェクトで延期し、非同期の動作を与えることができます。
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'));
SOスニペットではlocalStorage
の使用が許可されていないため、 repl.it で実行されることを確認してください。
新しい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コードとparallelで実行します。コールスタックが空になるまで、ジョブを遅延します。また、そのジョブが完了するまで、ブラウザコンテキストからの他のイベントも処理しません。したがって、たとえば、それでもGUIはブロックされます。
並行してアクセスする必要がある場合は、localStorage
を使用することはできません。たとえば、そのAPIはWebワーカーでは利用できません。
代わりに IndexedDB API
を調べることもできます。だが: