应用程序开始时的 Ionic Secure Storage get()
Posted
技术标签:
【中文标题】应用程序开始时的 Ionic Secure Storage get()【英文标题】:Ionic Secure Storage get() at the start of the app 【发布时间】:2021-07-22 09:13:54 【问题描述】:我有一个服务可以在 /src/main.ts 中获取一个用于验证身份验证状态的令牌:
if (TokenService.getAccessToken() !== undefined)
...
token.service.ts
import storage from '@/plugins/storage'
const ACCESS_TOKEN_KEY = "access_token";
const TokenService =
getAccessToken()
storage.get(ACCESS_TOKEN_KEY).then(v =>
return v
)
,
async saveAccessToken(accessToken: string)
storage.set(ACCESS_TOKEN_KEY, accessToken);
,
export TokenService ;
storage.ts:
import Storage, Drivers from '@ionic/storage'
const localStorage = new Storage()
localStorage.create()
const storage =
set: async(i: any, v: any) =>
await localStorage.set(i, v)
,
get(i: any)
return localStorage.get(i)
,
remove: async (i: any) =>
await localStorage.remove(i);
,
clear: async () =>
await localStorage.clear();
export default storage
我只得到 undefined 但是当在 storage.ts 中使用 console.log() 时,我得到了值,但是在应用程序启动之后。
我也使用这个函数在 /router/index.ts 中创建条件 当我使用 localStorage 时,我得到了很好的值。
我的依赖:
"@ionic-native/secure-storage": "^5.31.1",
"@ionic/storage": "^3.0.4",
"@ionic/vue": "^5.6.0-dev.202102221703.5300dcc",
"@ionic/vue-router": "^5.6.0-dev.202102221703.5300dcc",
"vue": "^3.0.0-0",
"vue-router": "^4.0.0-0",
"vuex": "^4.0.0-rc.2",
我能做什么? 谢谢!
【问题讨论】:
【参考方案1】:我在您的 token.service.ts 中发现了一个问题,您没有返回任何内容:getAccessToken
// async since is returning a promise
async getAccessToken()
// Returning the promise.
return storage.get(ACCESS_TOKEN_KEY)
从外部使用它会是这样的:
// using await because we want the promise to be solved
if ((await TokenService.getAccessToken()) !== undefined)
...
【讨论】:
似乎我不能在 main.ts 中使用 await 我得到:'不能在异步函数之外使用关键字 await' 没错,await 只能在异步函数内部使用。如果你没有函数,你总是可以使用普通的 promise 方法TokenService.getAccessToken().then(token=>/*undefined check or any other code*/)
谢谢。您是否知道仅使用 getAccessToken() 函数而不使用 then() 来获取值的任何方法?
你确定 storage.get 返回一个承诺吗?从 Ionic 查看文档似乎并没有返回一个承诺,如果是这样,那么您可以将其用作普通方法,而无需异步、等待或 then。但是如果它返回一个承诺,那么你必须等待承诺被履行以上是关于应用程序开始时的 Ionic Secure Storage get()的主要内容,如果未能解决你的问题,请参考以下文章
如何解决在 Ionic Vue 方法的嵌套范围内定义“this”时的 ESLint 错误