Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript rxjs运算符,用于转换可观测值<;列表<;X>&燃气轮机;可观察<;X>;_Javascript_Angular_Rxjs_Observable_Reactive Programming - Fatal编程技术网

Javascript rxjs运算符,用于转换可观测值<;列表<;X>&燃气轮机;可观察<;X>;

Javascript rxjs运算符,用于转换可观测值<;列表<;X>&燃气轮机;可观察<;X>;,javascript,angular,rxjs,observable,reactive-programming,Javascript,Angular,Rxjs,Observable,Reactive Programming,我正在使用Angular HTTP和rxjs使用一个用户友好的API。我正试图从我的服务中获得一个可观察的返回。下面是从get请求返回的JSON示例: Items: { ​​ "$type": "System.Collections.Generic.List`1[[Asi.Soa.Core.DataContracts.GenericEntityData, Asi.Contracts]], mscorlib" ​​ "$values": [ Object { "$type

我正在使用Angular HTTP和rxjs使用一个用户友好的API。我正试图从我的服务中获得一个可观察的
返回。下面是从get请求返回的JSON示例:

Items: {
​​    "$type": "System.Collections.Generic.List`1[[Asi.Soa.Core.DataContracts.GenericEntityData, Asi.Contracts]], mscorlib"
​​    "$values": [
       Object { "$type": "Asi.Soa.Core.DataContracts.GenericEntityData, Asi.Contracts", EntityTypeName: "7", Properties: {…} }
       Object { "$type": "Asi.Soa.Core.DataContracts.GenericEntityData, Asi.Contracts", EntityTypeName: "7", Properties: {…} }
       Object { "$type": "Asi.Soa.Core.DataContracts.GenericEntityData, Asi.Contracts", EntityTypeName: "7", Properties: {…} }
    ]
}
然后在每个对象内部:

{
  "$type": "Asi.Soa.Core.DataContracts.GenericEntityData, Asi.Contracts"
   EntityTypeName: "7"
   Properties: {
    "$type": "Asi.Soa.Core.DataContracts.GenericPropertyDataCollection, Asi.Contracts"
    "$values": {}
}
我需要为每个项目提取
$values
,然后返回
$values
对象的列表。但我不知道如何在没有订阅的情况下使用Angular和rxjs实现这一点。我不想订阅,因为我想让组件,而不是服务来处理结果数据

我一直在寻找rxjs操作符来解决我的问题。但是,似乎没有一个操作符可以将
列表
转换为X,同时保留可观测值


这可能与Angular2+和rxjs有关吗?或者有没有更好的方法来完成这项任务。我对反应式编程相对较新,因此任何一般性建议都将不胜感激。

您可以使用map()操作符转换RxJS中的元素。它将更改应用于流中的每个元素,并返回更改后的元素

subscribe()的目的是首先触发所有RXJS函数。因为即使一个冷的可观测对象获得了一个新的值,它也不会发生任何事情,除非最后是一个订阅。所以你可以

const sub = $stream.map(originalValue => {return transformToX(originalValue);})
.subscribe(transformedValue => {
    emitter.emit(transformedValue);
});
或者更清楚地说明认购的目的:

const sub = $stream.map(originalValue => {return transformToX(originalValue);})
.do(transformedValue => {
    emitter.emit(transformedValue);
})
.subscribe();

当你不再需要订阅时,不要忘记取消订阅!有关详细信息,请参见。

使用map()-运算符转换RxJS中的元素。它将更改应用于流中的每个元素,并返回更改后的元素

subscribe()的目的是首先触发所有RXJS函数。因为即使一个冷的可观测对象获得了一个新的值,它也不会发生任何事情,除非最后是一个订阅。所以你可以

const sub = $stream.map(originalValue => {return transformToX(originalValue);})
.subscribe(transformedValue => {
    emitter.emit(transformedValue);
});
或者更清楚地说明认购的目的:

const sub = $stream.map(originalValue => {return transformToX(originalValue);})
.do(transformedValue => {
    emitter.emit(transformedValue);
})
.subscribe();
当你不再需要订阅时,不要忘记取消订阅!请参阅。

使用(在其他实现中通常称为
flatMap

mergeMap
允许您:

  • 将每个项目映射到列表中(即,为每个事件发出一个值列表)
  • 将列表展平返回到一个事件流中

  • 假设收到以下数据:

    const result = {
      items: {
        $type: 'something something',
        $values: [1, 2, 3]
      }
    }
    
    您可以使用以下方法获得其值的
    可观察的

    Rx.Observable.of(result).mergeMap(x => x.items.$values)
    
    例如:

    Rx.Observable
      .of(result)
      .mergeMap(x => x.items.$values)
      .subscribe(value => console.log(`new value: ${value}`));
    
    。。。将打印:

    新值:1
    新值:2
    新值:3

    使用(在其他实现中通常称为
    flatMap

    mergeMap
    允许您:

  • 将每个项目映射到列表中(即,为每个事件发出一个值列表)
  • 将列表展平返回到一个事件流中

  • 假设收到以下数据:

    const result = {
      items: {
        $type: 'something something',
        $values: [1, 2, 3]
      }
    }
    
    您可以使用以下方法获得其值的
    可观察的

    Rx.Observable.of(result).mergeMap(x => x.items.$values)
    
    例如:

    Rx.Observable
      .of(result)
      .mergeMap(x => x.items.$values)
      .subscribe(value => console.log(`new value: ${value}`));
    
    。。。将打印:

    新值:1
    新值:2
    新值:3


    原始可观察($stream)保持不变。您可以随时对其应用更改并订阅这些更改。因此,在类中的任何其他位置,都可以有另一个
    $stream.map(…).subscribe()和原始可观察($stream)保持不变。您可以随时对其应用更改并订阅这些更改。因此,在类中的任何其他位置,都可以有另一个
    $stream.map(…).subscribe()我最终需要将map和mergeMap结合起来,但这正是我想要的。谢谢我最终需要将map和mergeMap结合起来,但这正是我想要的。谢谢