Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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以适当的格式返回observable,并附加单独的分页数据_Javascript_Typescript_Rxjs - Fatal编程技术网

Javascript 如何使用RxJS以适当的格式返回observable,并附加单独的分页数据

Javascript 如何使用RxJS以适当的格式返回observable,并附加单独的分页数据,javascript,typescript,rxjs,Javascript,Typescript,Rxjs,我有一个返回以下内容的API: { 'data' : { players: [ {id: 1, name: 'harry'}, {id: 2, name: 'barry'} ... ], }, 'paging': { current: 1, totalPages: 10, } } 我如何在对象中的播放器和分页信息中正确返回此值,使它们成为单独的键 getPlayers(type: string): Obser

我有一个返回以下内容的API:

{
  'data' : {
     players: [
        {id: 1, name: 'harry'},
        {id: 2, name: 'barry'} ...
     ],
  },
  'paging': {
    current: 1,
    totalPages: 10,
  } 
}
我如何在对象中的播放器和分页信息中正确返回此值,使它们成为单独的键

getPlayers(type: string): Observable<Player[]> {
  return this.get(myApiURL).pipe(
    map(result => {
      'players': result.data.map(player => {
        player._dead = !!player.deathDate;
        return player;
      }),
    }
  );
);

getPlayers(类型:string):可观察{
返回此.get(myapirl).pipe(
映射(结果=>{
“玩家”:result.data.map(玩家=>{
玩家。_dead=!!player.death日期;
返回球员;
}),
}
);
);

接口

interface Player {
  id;
  name;
}

interface Paging {
  current;
  totalPages
}

interface HttpPlayer  {
  data: {
    players: Player[]
  };
  paging: Paging;
}

interface UiPlayer {
  id;
  name;
  current;
  totalPages;
}
映射到合并播放器和分页(关于您的问题)

映射到单独的播放器和分页(关于您的评论)

使用映射(合并)

getPlayers(类型:string):可观察{
返回此.get(myapirl).pipe(
地图(将播放器与分页合并)
)
} 
使用映射(单独)

getPlayers(类型:string):可观察{
返回此.get(myapirl).pipe(
地图(mapHttpPlayerToPlayers)
)
}
getPaging(类型:string):可观察{
返回此.get(myapirl).pipe(
地图(mapHttpPlayerToPaging)
)
} 

我调整了映射。这个答案解决了您的问题还是您需要进一步的信息?我不理解上述解决方案的问题。无论您的对象有多少个属性。mappinig要么使用包含所有属性的spread运算符,要么创建一个包含对象分配的对象,该对象分配也包含所有参数。您的如果你觉得有一个“更干净”的解决方案,那么也许可以提供你不舒服的地方的信息。也请集中在这里的一个问题,并考虑打开另一个问题。我更新了我的答案。“为玩家发送一个对象数组,为分页发送一个单独的对象不是更有意义吗?”你的API已经发送了这个结构。我不确定你想实现什么。我现在回答了你的问题和你的新要求(单独的对象-关于你的评论)。从现在起,我将停止更新,因为您似乎不知道您需要/想要什么。我试图帮助您,但我在该平台上花费的时间有限。
const mergePlayersWithPaging = (data: HttpPlayer): UiPlayer [] => data.players.map(player => Object.assign({}, player, data.paging))
const mapHttpPlayerToPlayers = (httpPlayer: HttpPlayer): Player[] => httpPlayer.data.players;

const mapHttpPlayerToPaging = (httpPlayer: HttpPlayer): 
getPlayers(type: string): Observable<Player[]> {
 return this.get(myApiURL).pipe(
   map(mergePlayersWithPaging)
 )
} 
getPlayers(type: string): Observable<Player[]> {
 return this.get(myApiURL).pipe(
   map(mapHttpPlayerToPlayers)
 )
}

getPaging(type: string): Observable<Player[]> {
 return this.get(myApiURL).pipe(
   map(mapHttpPlayerToPaging)
 )
}