应用程序开始时的 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()的主要内容,如果未能解决你的问题,请参考以下文章

Ionic2 x Angular:导航更改时的服务重置

服务器上有新数据时的 Ionic 2 推送通知

ionic sqlite 遇到的问题

如何解决在 Ionic Vue 方法的嵌套范围内定义“this”时的 ESLint 错误

我无法在 cordova-sqlite-storage 中为 ionic 1 打开数据库

ionic 2 应用程序加载时间长