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

在代码中创建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 - 为什么在CombineLatest之后,subscribe()不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50546174/

10-12 16:17