【发布时间】:2019-06-21 00:59:56
【问题描述】:
组件 HTML 中的提交按钮会触发名为 addCollaborators() 的函数。相关代码如下:
component.ts
emails: string[] = [];
constructor(public userService: UserService) {}
// This is the function called from the HTML
addCollaborators() {
this.emails.forEach(email => {
const user = this.getUserFromEmail(email);
if (user instanceof User) {
this.counterService.someDbFunction();
}
});
this.dialogRef.close();
}
getUserFromEmail(emailAddress: string): User | void {
console.log("Code is reached here");
this.userService.users$.subscribe((users: User[]) => {
console.log("This is never reached");
for (const user of users) {
if ( /* Some boolean logic */ ) {
return user;
}
}
});
}
user.service.ts
users$: Observable<User[]>;
如日志语句中所述,getUserFromEmail 内的订阅中的任何代码均未执行。这很明显,因为没有执行任何操作并且控制台中不存在消息。 users$ observable 填充在服务构造函数中,并在其他地方成功订阅。其实component.ts的构造函数里面的这条语句是成功的:
this.userService.users$.subscribe(users => console.log(users));
如果有任何其他信息对我有帮助,请告诉我,并提前致谢。
更新
以下内容不会记录任何内容,因此它可能是比之前认为的更根本的问题。
addCollaborators() {
console.log("I am logged");
this.userService.users$.subscribe(users => console.log("I am not", users));
}
相关的 HTML:
<button mat-fab
(click)="addCollaborators()"
class="add-collaborators">
<mat-icon>group_add</mat-icon>
</button>
【问题讨论】:
-
如果您要检查用户,您需要在订阅中检查他们。去掉return user if语句,替换成instanceof user if语句。
-
即使我将所有逻辑都移到了订阅中,操作也无法完成。使用更多信息和测试更新问题。
标签: angular typescript rxjs