尝试从Angular Service中的以下函数返回布尔值,但无法正常工作,请帮忙!
isActive(id: string): boolean {
if (!id) {
return false;
}
let userActive = false;
this.getUsers().subscribe(ActiveUsers => {
const user = ActiveUsers.find(
p => p.id === id
);
userActive = user ? true : false;
return userActive;
});
}
异步getUsers
函数(从API获取其users
):
getUsers(): Observable<user[]> {
}
答案 0 :(得分:2)
我建议在您的组件中创建一个变量并将其存储在那里。然后,您可以在需要时使用它。我不知道getUsers是否异步,所以请记住这一点。
isActive(id: string): boolean {
if (!id) {
this.isActiveValue = false;
}
let userActive = false;
this.getUsers().subscribe(ActiveUsers => {
const user = ActiveUsers.find(
p => p.id === id
);
userActive = user ? true : false;
this.isActiveValue = userActive;
});
}
编辑: 好的,那您应该记住一些事情。如果您有一个具有可观察性的方法,则该方法应返回另一个可观察性或不返回任何值,只是为了保持一致。试试这个:
isActive(id: string): Observable<boolean> {
var subject = new Subject<boolean>();
let userActive: boolean = false;
this.getUsers().subscribe(ActiveUsers => {
const user = ActiveUsers.find(
p => p.id === id
);
userActive = user ? true : false;
subject.next(userActive);
});
return subject.asObservable();
}
用法:
isActive(id).subscribe(result => console.log(result));
答案 1 :(得分:1)
因为这是在调用一个可观察的对象(它是异步的),所以您需要返回一个可观察的对象或一个Promise。
返回可观察值:
isActive(id: string): Observable<boolean> {
return this.getUsers()
.pipe(
map(
activeUsers =>
!!(activeUsers.find(p => p.id == id))
)
);
}
用法:
isActive(id).subscribe(result => console.log(result))
如果我想要一个承诺,我将从此代码开始并添加更多内容:
isActive(id: string): Promise<boolean> {
const isActiveObservable = this.getUsers()
.pipe(
map(
activeUsers =>
!!(activeUsers.find(p => p.id == id))
)
);
};
return new Promise<boolean>(
(resolve, reject) {
let subscription = isActiveObservable
.subscribe({
next: isActive => {
subscription.unsubscribe();
resolve(isActive);
},
error: e => reject(e)
}
);
}
);
}
用法:
isActive(id).then(userIsActive => console.log(userIsActive));
或使用async
关键字:
let userIsActive:boolean = await isActive(id);
console.log(userIsActive)