我有一个用户模型:
export class User extends Serializable{
id: string;
first_name: string;
middle_name: string;
last_name: string;
email: string;
image_url: string;
// mykeyStore
static store:StoreDatabase = new StoreDatabase("mykeyStore");
... More code...
该类的
loadProfile()
函数返回一个promise。loadProfile():Dexie.Promise<any>{
let promise = User.store.get('user')
.then(
tuple => {
// Extract User Data from tuple
let user_data = tuple && tuple.value
// Fill User attribute for Tuple's value
for (var attr in user_data) {
this[attr] = user_data[attr];
}
});
return promise;
}
如何构造我的代码,以便调用
loadProfile
并不会始终运行then
(如果已解决),方法是调用以下命令:let user = new User();
user.loadProfile().then( () =>
console.log(user.first_name)
);
最佳答案
每次您调用user.loadProfile()
时,都会创建一个新的Promise。因此,.then()
中的代码将始终运行。
如果要避免多次加载属性,可以将函数更改为:
loadProfile():Dexie.Promise<any>{
if (this.promise) return this.promise
this.promise = User.store.get('user')
.then(
tuple => {
// Extract User Data from tuple
let user_data = tuple && tuple.value
// Fill User attribute for Tuple's value
for (var attr in user_data) {
this[attr] = user_data[attr];
}
});
return this.promise;
}
然后,如果在加载
user.loadProfile()
时调用它,那么.then()
中的代码将立即执行。