Mar*_*tin 6 javascript rxjs typescript angular
我在使用 rxjs 6.5 的 typescript/angular 中有这个场景:
main(){
const properties = ['session', 'user'];
const source: Observable<any> = from(properties);
source
.pipe(
mergeMap(key => this.getKey().map((value) => ({key: key, value: value}))),
tap((result) => {
// sending the result elsewhere;
}),
).subscribe(
(result) => {
console.log('Final result ->', result);
}
);
console.log('\n');
}
getKey(): Observable<any> {
// Mock function that returns an observable that emits 1 value
const observable = from(['test']);
return observable;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Final result -> {key: "session", value: "test"}
Final result -> {key: "user", value: "test"}
Run Code Online (Sandbox Code Playgroud)
第一个问题: 如何以最优雅的方式在订阅源时返回1 个值,以及内部 observables 的组合结果?
我想要的输出,以这种方式订阅(因为我希望这个组合操作在管道中),将是:
(...).subscribe(
(result) => {console.log('Final Result:', result}
)
OUTPUT:
Final result -> [{key: "session", value: "test"}, {key: "user", value: "test"}]
Run Code Online (Sandbox Code Playgroud)
第二个问题 如果我不关心内部 observables 的结果,我如何只返回 1 个值或者我如何知道所有内部 observables 何时完成?
提前致谢。
Adr*_*rma 10
要获得 mergeMap 所有响应的合并结果,您还可以尝试这样:
return this.request1().pipe(
mergeMap(res1=> this.request2(res1.id).pipe(
map(res2=> {
return {
res1: res1,
res2: res2
}
})
))
)
Run Code Online (Sandbox Code Playgroud)
Q1:您需要一个toArray
\xe2\x80\x94 它将把所有流值合并到一个数组中:
Q2:省略流中的所有值并在完成时发出一个值
\n\nconcat(\n source$.pipe(ignoreElements()),\n of(true)\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n\n\n请参阅游乐场中的“源完成时发出值”示例
\n 归档时间: |
|
查看次数: |
8513 次 |
最近记录: |