首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在映射结果形成之前,如果需要订阅内部数据,如何映射可观测的数据?

在映射结果形成之前,如果需要订阅内部数据,如何映射可观测的数据?
EN

Stack Overflow用户
提问于 2019-09-15 18:33:03
回答 2查看 118关注 0票数 0

我试图做一个可观测订阅,通过多次与地图运算符形成,以建立最终的结果。

假设我们订阅了外部可观测的functionA(),但是有functionB():可观测的数据是通过两个可观测的,第二个可观测的取决于第一个结果,然后我们如何才能得到最终的可观测映射的返回。请检查我需要描述的代码:-

代码语言:javascript
复制
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()

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-15 19:20:42

一个flatMap (或它的一个兄弟)将返回一个新的流,在链的末尾有一个普通的.subscribe()来启动业务。可能有一种更整洁的方法将objectA包含在结果流中,但这应该可以完成以下工作:

代码语言:javascript
复制
functionB() : observable<any> {
    return this.datastream1().pipe(
        flatMap(objectA => combineLatest(of(objectA), this.datastream2(objectA))
    );
}
票数 2
EN

Stack Overflow用户

发布于 2019-09-16 07:27:31

我认为您可以使用concatMap操作符,它在内部不订阅下一个可观察到的,直到前面的操作完成。

代码语言:javascript
复制
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的完成,然后才开始发射。你可以试试,这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57947112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档