首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >区域感知承诺与离子5和角10

区域感知承诺与离子5和角10
EN

Stack Overflow用户
提问于 2020-12-29 15:58:49
回答 1查看 878关注 0票数 0

我对承诺(通常使用可观察的)和Ionic都很陌生。

我使用电容,我已经将用户Id存储在本地存储器中,如下所示:

代码语言:javascript
复制
import { Plugins } from '@capacitor/core';

async storeAuthData(token: string, user: IUserAuth): Promise<void>{

    await Plugins.Storage.set({
        key: '_token',
        value: token
    });

    await Plugins.Storage.set({
        key: '_u',
        value: JSON.stringify(user)
    });
}

我想从那个存储集中检索userId。我已经在返回中包装了我的承诺,并且相信我已经完成了正确的语法,但是当我调用这个函数时,我在控制台中得到了区域感知承诺_state: null信息。

代码语言:javascript
复制
 async getUserId(): Promise<string> {
    return Plugins.Storage
            .get({key: '_u'})
            .then(userObj => {
                var user = JSON.parse(userObj.value);
                return user.id.toString();
            }).catch(err => {
                console.log(err)
                return null;
            });
}

对怎么做有什么想法吗?

这样调用getUserId函数:

代码语言:javascript
复制
var id = await this.auth.getUserId();
console.log(id)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-29 16:15:47

承诺的一件事是,我们必须将它们封装在异步方法中。

所以你的代码应该是这样的:

代码语言:javascript
复制
async storeAuthData(token: string, user: IUserAuth): Promise<void> {
  // now we introduce the await or the code will run out of control
  await Plugins.Storage.set({
    key: '_u',
    value: JSON.stringify(user)
  });

  // same here
  await Plugins.Storage.set({
    key: '_token',
    value: token
  });
}

然后取回

代码语言:javascript
复制
async getUserId(): Promise <string> {
  return Plugins.Storage
    .get({
      key: '_u'
    })
    .then(userObj => JSON.parse(userObj.value))
    .catch(err => {
      console.log(err)
      return null;
    });
}

当我们调用时,我们也必须使用等待关键字。

就像这样:

代码语言:javascript
复制
console.log('userId', await UserService.getUserId())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65495004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档