javascript - 为什么在 mergeLatest 之后 subscribe() 不起作用?

标签 javascript rxjs

我开始编写一个简单的脚本,但遇到了问题,请帮我解决它。

代码中创建了 2 个线程:玩家、墙壁:

const walls = Rx.Observable
    .range(1, 10)
    .map(() => {
        return {
            x: helper.randomIntFromZero(canvas.width - wallWidth),
            y: helper.randomIntFromZero(canvas.height - wallHeight)
        };
    })

const player = move.map(
    e => {
    const coords = { x: 0, y: 0 }

        if (e.keyCode == 37) {
            coords.x -= (player.x <= 0) ? 0 : deltaCoord;
        }

        if (e.keyCode == 38) {
            coords.y -= (player.y <= 0) ? 0 : deltaCoord;
        }

        if (e.keyCode == 39) {
            coords.x += (player.x + player.width >= canvas.width) ? 0 : deltaCoord;
        }

        if (e.keyCode == 40) {
            coords.y += (player.y + player.width >= canvas.height) ? 0 : deltaCoord;
        }

        return coords;
    }
)  
.startWith({ x: 0, y: 0 })

我同时订阅了它们:

Rx.Observable.combineLatest((player, walls) => {
    console.log(player, walls);
})
.subscribe((player, walls) => {
    console.log('player', player);
    console.log('walls', walls);
});

问题是最后一段代码的console.logs没有输出到控制台。

Live DEMO here.

最佳答案

您没有向 combineLatest 提供可观察值。

你应该这样做:

Rx.Observable.combineLatest(player, walls)

它会给你一个数组,所以你应该像这样订阅:

  .subscribe(([player, walls]) => {
    console.log('player', player);
    console.log('walls', walls);
  });

关于javascript - 为什么在 mergeLatest 之后 subscribe() 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50546174/

相关文章:

javascript - Extjs 4.1 - 禁用文本字段的粘贴事件

javascript - 确保 javascript 缓存在 ASP.NET MVC 应用程序的浏览器中

javascript - 如何将嵌套对象更改为数组

javascript - jQuery - 将类添加到最近的音频播放器上方的 Div

javascript - 如何使用类隐藏元素;而不是在 JQuery 中使用 css 函数?

angular - 类型 'zone' 上不存在属性 'Observable<{}>'

javascript - 如何在已被模板订阅的 Observable 上循环 (forEach)

angular - 在某个点中止 concat observables

angular - 为什么 rxjs 的 mergeMap 将数组变成单独的对象

javascript - Rxjs 与 Lodash 对比? rxjs 可以替代 lodash 吗?