Ionic 5 和 Angular 10 的区域感知承诺
Zone Aware Promise with Ionic 5 and Angular 10
我是 Promises(通常使用 Observables)和 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)
});
}
我想从该存储集中检索用户 ID。我已将我的 Promise 包装在 return 中并相信我已经完成了正确的语法,但是当我调用此函数时,我在控制台中获得了 Zone Aware Promise _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)
关于 promises 的一件事是我们必须将它们包装在异步方法中。
所以你的代码应该是这样的:
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;
});
}
当我们调用时,我们也必须使用 await 关键字。
像这样:
console.log('userId', await UserService.getUserId())
我是 Promises(通常使用 Observables)和 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)
});
}
我想从该存储集中检索用户 ID。我已将我的 Promise 包装在 return 中并相信我已经完成了正确的语法,但是当我调用此函数时,我在控制台中获得了 Zone Aware Promise _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)
关于 promises 的一件事是我们必须将它们包装在异步方法中。
所以你的代码应该是这样的:
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;
});
}
当我们调用时,我们也必须使用 await 关键字。
像这样:
console.log('userId', await UserService.getUserId())