如何检查 RxJS Observable 是否包含 Angular2 中的字符串?
How to check if a RxJS Observable contains a string in Angular2?
我是 Angular2 和 Observable 的新手,我想检查 Observable<string[]>
类型的 Observable getRoles
是否包含字符串。
public hasRole(name: string): boolean {
// getRoles is of type Observable<string[]>
let getRoles = this.tokenService.getTokenInformation().map(element => element.roles);
if (/* check if name is inside of getRoles */) {
return true;
}
return false;
}
Observable 是异步的,因此您不能使用 let getRoles = ...map(...)
。 map()
方法不是在数组上执行,而是在始终异步的 Observable 上执行。
所以正确的方法可能是(我没有测试这段代码):
public hasRole(name: string): Observable {
return this.tokenService.getTokenInformation()
.map(element => element.roles)
.first(roles => roles.indexOf(name) !== -1);
}
运算符 first()
在源完成时(当我们迭代所有角色时)没有找到匹配的元素时发出错误。
然后像这样使用这个方法:
hasRole('my-role').subscribe(
role => console.log("has role"),
error => console.log("doesn't have role"),
)
编辑:
这会将所有内容转换为仅 true
或 false
值。请参阅文档了解 first()
运算符这些参数是什么。然后我使用 map()
强制将所有内容转换为布尔值。
public hasRole(name: string): Observable {
return this.tokenService.getTokenInformation()
.map(element => element.roles)
.first(roles => roles.indexOf(name) !== -1, undefined, false)
.map(val => !!val);
}
我是 Angular2 和 Observable 的新手,我想检查 Observable<string[]>
类型的 Observable getRoles
是否包含字符串。
public hasRole(name: string): boolean {
// getRoles is of type Observable<string[]>
let getRoles = this.tokenService.getTokenInformation().map(element => element.roles);
if (/* check if name is inside of getRoles */) {
return true;
}
return false;
}
Observable 是异步的,因此您不能使用 let getRoles = ...map(...)
。 map()
方法不是在数组上执行,而是在始终异步的 Observable 上执行。
所以正确的方法可能是(我没有测试这段代码):
public hasRole(name: string): Observable {
return this.tokenService.getTokenInformation()
.map(element => element.roles)
.first(roles => roles.indexOf(name) !== -1);
}
运算符 first()
在源完成时(当我们迭代所有角色时)没有找到匹配的元素时发出错误。
然后像这样使用这个方法:
hasRole('my-role').subscribe(
role => console.log("has role"),
error => console.log("doesn't have role"),
)
编辑:
这会将所有内容转换为仅 true
或 false
值。请参阅文档了解 first()
运算符这些参数是什么。然后我使用 map()
强制将所有内容转换为布尔值。
public hasRole(name: string): Observable {
return this.tokenService.getTokenInformation()
.map(element => element.roles)
.first(roles => roles.indexOf(name) !== -1, undefined, false)
.map(val => !!val);
}