我需要等待第一个函数结果执行第二个结果。
第一个功能
getUser() {
this.authService.user().subscribe(
user => {
this.user = user;
console.log('current user 1: ', user);
console.log('current user 2: ', this.user);
}
);
}
async ngOnInit() {
this.socket.fromEvent('message').subscribe(async (message: any) => {
if(this.user === undefined) {
// first function called
this.getUser();
// before it finish this console log will fire, therefore it returns `undefined`
console.log('this user: ', this.user);
} else {
//....
}
}
}
我需要保留控制台呼叫,直到完成this.getUser();
。 该怎么做?
答案 0 :(得分:2)
您可以将getUser()方法转换为Promise。..
getUser():Promise<any>{
return new Promise((resolve,reject) =>{
this.authService.user().toPromise().then(user => {
this.user = user;
console.log('current user 1: ', user);
console.log('current user 2: ', this.user);
resolve(user);
}).catch(err=> reject(err));
});
}
然后在您的ngOnInit()
async ngOnInit(){
this.socket.fromEvent('message').subscribe((message: any) => {
if(this.user === undefined) {
// first function called
await this.getUser().then(user=>{
console.log('this user: ', user);
});
}
});
}
另外,尝试使用toPromise(),在该情况下,您只需要从观察者获取一次数据即可。.订阅观察者,然后不取消订阅将导致内存泄漏。.
答案 1 :(得分:0)
如果您使用CombineLatest
combineLatest(this.authService.user(), this.socket.fromEvent('message'))
.subscribe(([user, message]) => {
// Both message and user are available at the same time
});
答案 2 :(得分:0)
您需要像下面这样使用use await,希望它能解决您的问题
async ngOnInit() {
this.socket.fromEvent('message').subscribe(async (message: any) => {
if(this.user === undefined) {
// first function called
await this.getUser();
// before it finish this console log will fire, therefore it returns `undefined`
console.log('this user: ', this.user);
} else {
//....
}
}}