我对承诺(通常使用可观察的)和Ionic都很陌生。
我使用电容,我已经将用户Id存储在本地存储器中,如下所示:
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信息。
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函数:
var id = await this.auth.getUserId();
console.log(id)发布于 2020-12-29 16:15:47
承诺的一件事是,我们必须将它们封装在异步方法中。
所以你的代码应该是这样的:
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
});
}然后取回
async getUserId(): Promise <string> {
return Plugins.Storage
.get({
key: '_u'
})
.then(userObj => JSON.parse(userObj.value))
.catch(err => {
console.log(err)
return null;
});
}当我们调用时,我们也必须使用等待关键字。
就像这样:
console.log('userId', await UserService.getUserId())https://stackoverflow.com/questions/65495004
复制相似问题