Angular 5 - Rxjs forkJoin

标签 angular asynchronous rxjs angular5 fork-join

以下代码:

this.playerSearchService.getPlayerByPlayerTag(this.searchValue).flatMap(player =>
  this.clanSearchService.getClanByClanTag(player.clan.tag).map(clan => {
    return Observable.forkJoin([Observable.of(player), Observable.of(clan)])
  })).subscribe(data => {
    this.playerResult = data[0]; <== undefined
    this.clanInfo = data[1];
    console.log(data);
});

即使控制台向我显示数据:

ForkJoinObservable {_isScalar: false, sources: Array(2), resultSelector: null}resultSelector: nullsources: Array(2)0: ScalarObservablescheduler: nullvalue: achievements: (32) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]attackWins: 0bestTrophies: 3356bestVersusTrophies: 4711builderHallLevel: 7clan: {tag: "#PRJ9J9GG", name: "Forensik", clanLevel: 14, badgeUrls: {…}}defenseWins: 0donations: 1donationsReceived: 60expLevel: 132heroes: (3) [{…}, {…}, {…}]league: {id: 29000014, name: "Master League II", iconUrls: {…}}legendStatistics: {legendTrophies: 0, previousVersusSeason: {…}, bestVersusSeason: {…}, currentSeason: {…}}name: "Marco"role: "member"spells: (9) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]tag: "#9Y2RJ89YL"townHallLevel: 9troops: (27) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]trophies: 2857versusBattleWinCount: 1027versusBattleWins: 1027versusTrophies: 4000warStars: 665__proto__: Object_isScalar: true__proto__: Observable1: ScalarObservable {_isScalar: true, value: {…}, scheduler: null}length: 2__proto__: Array(0)_isScalar: false__proto__: Observable

data[0]data[1] 未定义,我如何从 forkJoin 检索数据?

顺便说一句。 Data.sources[0].values 也不起作用。卡在这个上的时间......

最佳答案

试试这个:

this.playerSearchService.getPlayerByPlayerTag(this.searchValue).switchMap(player =>
Observable.zip(this.clanSearchService.getClanByClanTag(player.clan.tag), Observable.of(player))).subscribe(([tag, player]) => {
        this.playerResult = player;
        this.clanInfo = tag;
    });

关于Angular 5 - Rxjs forkJoin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49516866/

相关文章:

具有私有(private)观察者的 Angular 2 多组件

typescript - 无法使用 Redux Observable 在 mergeMap 后传播值

javascript - 将一个属性应用于多个数组中的每个元素,然后返回一个包含一个数组的平面图

javascript - 误导性 “Calling an asynchronous function without callback is deprecated” 警告

javascript - 在 Angular 中 forEach 完成后执行命令

javascript - 为什么 typescript 看不到我的功能?

javascript - Angular 图表.js "Cannot use import statement outside a module"

c++ - asio 异步服务器不接受连接

Angular 6 : ng test library with IE (Polyfills)

database - 如何在 Angular 2 应用程序中从 sql 数据库获取数据?