Почему не срабатывает subscribe() после combineLatest()?

209
11 июня 2018, 19:40

Я начал писать простенький скрипт игры, но столкнулся с проблемой.

В коде создаётся 2 потока - player, walls:

const Helper = function() { 
  this.randomIntFromZero = function(maxExclusive) { 
      return Math.floor(Math.random() * (maxExclusive)); 
  }; 
}; 
helper = new Helper(); 
 
 
const move = Rx.Observable.fromEvent(document, 'keydown'); 
 
 
const canvas = document.createElement('canvas'); 
const ctx = canvas.getContext('2d'); 
document.body.appendChild(canvas); 
canvas.width = 200; 
canvas.height = 200; 
 
 
const WALLLS_CNT = 10; 
const wallWidth = 16; 
const wallHeight = 16; 
const wallColor = '#ccc'; 
 
const walls = Rx.Observable 
	.range(1, 10) 
	.map(() => { 
		return { 
			x: helper.randomIntFromZero(canvas.width - wallWidth), 
			y: helper.randomIntFromZero(canvas.height - wallHeight) 
		}; 
	}) 
   
const deltaCoord = 5; 
const canvasColor = '#fff'; 
 
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); 
});
<script src="https://unpkg.com/rxjs@5.5.2/bundles/Rx.min.js"></script>

JSFidddle

Проблема в том, что console.logs из последнего куска кода не выводятся в консоль.

Answer 1

Поменяйте последние две строчки на

const example = Rx.Observable.combineLatest(player, walls);
example.subscribe(
   ([player, walls]) => {
    console.log('player', player);
    console.log('walls', walls);      
  });
READ ALSO
Удаление символов из текста в java

Удаление символов из текста в java

Как удалить символы из текста за исключением русского/английского алфавита, знаков пунктуации и пробельных символов с помощью регулярных...

171
Json методы, как получить информацию из deviations

Json методы, как получить информацию из deviations

у меня есть задание, в одной части из которого я должен получить сообщение с сайта о возможной задержке поезда

210
Servlet отправка неоднородных данных

Servlet отправка неоднородных данных

Как отправить и картинки и разметку? Пихаю в OutputStream картинку, выставляю setContentType("imeg/jpeg")Все норм, но таких картинок я хочу отправить не одну!...

185
Android Room сохранение вложенных Entity

Android Room сохранение вложенных Entity

Недавно начал разбираться с android разработкойНикак не могу понять как с помощью Room сохранить в БД вот такой объект:

175