我试图做一个可观测订阅,通过多次与地图运算符形成,以建立最终的结果。
假设我们订阅了外部可观测的functionA(),但是有functionB():可观测的数据是通过两个可观测的,第二个可观测的取决于第一个结果,然后我们如何才能得到最终的可观测映射的返回。请检查我需要描述的代码:-
functionB() : observable<any>{
return this.datastream1().map((objectA)=>{
this.datastream2(objectA).map((objectB)=>{
return [...objectA,...objectB]
})
})
}
functionA(){
this.functionB().subscribe((data)=>{
console.log(data);
})
}因此,在这个例子中,当我订阅它时,我将在控制台中获得可观察到的数据,而不是从两个可观测到的数据中获取扩展的数据。
如何等待先解析嵌套的可观测依赖关系,而subscribing.In则是既可观测的,又可观察的,然后将数据返回给订阅函数,即textfunctionA()
发布于 2019-09-15 19:20:42
一个flatMap (或它的一个兄弟)将返回一个新的流,在链的末尾有一个普通的.subscribe()来启动业务。可能有一种更整洁的方法将objectA包含在结果流中,但这应该可以完成以下工作:
functionB() : observable<any> {
return this.datastream1().pipe(
flatMap(objectA => combineLatest(of(objectA), this.datastream2(objectA))
);
}发布于 2019-09-16 07:27:31
我认为您可以使用concatMap操作符,它在内部不订阅下一个可观察到的,直到前面的操作完成。
const datastream1 = () =>
of([{ value: 1 }, { value: 2 }, { value: 3 }]).pipe(delay(3000));
const datastream2 = dependentData => {
const result = [
{ value: dependentData[0].value + 100 },
{ value: dependentData[1].value + 100 },
{ value: dependentData[2].value + 100 }
];
return of(result);
};
const example = datastream1().pipe(
concatMap(val1 => datastream2(val1).pipe(map(val2 => [...val1, ...val2])))
);
example.subscribe(val => {
val.forEach(v => console.log("Value: " + v.value));
});在上面的例子中,我们将datastream1的发射延迟3秒。不过,datastream2正在等待datastream1的完成,然后才开始发射。你可以试试,这里。
https://stackoverflow.com/questions/57947112
复制相似问题