javascript - 如何使用 RxJS 以适当的格式返回 observable 以及额外的单独分页数据

标签 javascript typescript rxjs

我有一个返回以下内容的 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;
      }),
    }
  );
);

最佳答案

接口(interface)

interface Player {
  id;
  name;
}

interface Paging {
  current;
  totalPages
}

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

interface UiPlayer {
  id;
  name;
  current;
  totalPages;
}

映射以合并播放器和寻呼(关于您的问题)
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)
 )
} 

关于javascript - 如何使用 RxJS 以适当的格式返回 observable 以及额外的单独分页数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60158440/

相关文章:

typescript - Firestore批量深度合并

Typescript 不会提示缺少导入

javascript - 面临错误 core.js :15723 ERROR TypeError: Cannot read property 'toLowerCase' of undefined In Angular 7

javascript - vue组件中的jsp java变量访问

javascript - 我想知道如何通过 javascript 更改特定 <url> 中特定 <li> 的样式

javascript - xsl :attribute with condition and handlebars

javascript - 如何在 redux-observable 中正确使用 forkJoin?

javascript - Backbone.js 在获取返回值后呈现 View

javascript - 在 Angular 9 的 elemntRef 中找不到 Div 的内部文本

angular - 如果我发现自己一直在订阅另一个订阅中的内容,我应该怎么做?