【问题标题】:Convert static object to Observable and forkjoin将静态对象转换为 Observable 和 forkjoin
【发布时间】:2017-11-16 07:57:53
【问题描述】:

我有一个对象,需要将它与一个 observable 结合起来。

对象如下所示:

obj1

let org1Obj = {"category": "1", "testkey": "testvalue"}

使用 JSON.stringify 的 observable 的结果如下所示:

obj2

[{"id":"51XXgI1w77VerovThbUV","question":"Sdad"},
 {"id":"FxjDsyLBGqtrBx1EHFyM","question":"exanoke"}]

然后我有一个获取数据的 observable,我正在考虑使用 forkJoin 将两者结合起来,所以我最终得到以下结果:

{"category": "1", 
 "testkey": "testvalue", 
 "questions": [
   {"name": "test1"},
   {"name": "test"}
 ]
}

如何将 org1Obj 变成一个 observable,以便可以在其上使用 forkJoin,以及如何将第二个 observable 添加到“问题”:[result from observable]?

【问题讨论】:

  • 将值转换为发出单个值的可观察对象?这看起来像是对可观察对象的滥用。这可以通过简单的map 来完成。由于结果的值与原始对象不同,它们应该如何组合的方式仍不清楚。
  • 我需要转换它的原因是我可以使用 forkJoin,而 forkJoin 的原因是因为我需要等到第二个 observable 中的所有数据都可用。如果我尝试将它们组合起来,那么在函数运行之前,第二个 observable 中的数据将不可用。
  • 由于静态对象已经可用,结果数据将在 observable map 中可用。

标签: angular typescript object rxjs observable


【解决方案1】:

这可以通过:

const observable1 = Observable.of(obj1);
return Observable.forkJoin(observable1, observable2).map(([obj1, obj2]) => {
  return Object.assign({}, obj1, { questions: obj2 }); // or so
});

更简单、更高效的方法是跳过forkJoin 并将一个可观察对象映射到结果对象:

return observable2.map(obj2 => {
  return Object.assign({}, obj1, { questions: obj2 }); // or so
});

【讨论】:

  • 可能是return Object.assign({}, obj1, { questions: obj2 });?
  • 可能,但不清楚问题的数据输入和输出是什么。我想这超出了主题范围。
  • 我在想最终的形状很清楚。
  • 我明白你的意思,是的,我想这样更接近,谢谢(虽然 obj2 看起来仍然不像预期的问题,可能数组应该被映射或其他东西)
  • 啊,确实!
猜你喜欢
  • 2017-11-05
  • 2020-12-16
  • 2017-08-15
  • 1970-01-01
  • 2013-07-29
  • 2013-05-14
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多