Я работаю над приложением Angular, которое слушает брокера MQTT. Я пытаюсь проанализировать ответ с помощью функции JSON.parse (). Это выглядит просто, но я не могу получить правильные данные в моей глобальной переменной.
Я публикую эти данные (id источника света и значение rgb этого источника света):
[{"light":2,"color":{"r":150,"g":24,"b":24}},{"light":3,"color":{"r":150,"g":24,"b":24}},{"light":4,"color":{"r":150,"g":24,"b":24}},{"light":6,"color":{"r":150,"g":24,"b":24}},{"light":7,"color":{"r":150,"g":24,"b":24}}]
Код выглядит следующим образом.
export class LightsComponent implements OnDestroy {
lightsValues;
private subscription: Subscription;
constructor(private mqttService: MqttService) {
this.subscription = this.mqttService.observe(TOPIC).subscribe((message: IMqttMessage) => {
this.lightsValues = JSON.parse(message.payload.toString());
console.log(JSON.parse(message.payload.toString()));
console.log(this.lightsValues);
});
}
Результат console.log - странная часть, так как я назначаю только ту же JSON.parse () переменной, что и в console.log -
https://imgur.com/RdDai1B
Как видите, параметр light для всех объектов имеет значение 0, rgb установлено правильно.
Однако, когда я меняю переменную lightsValues на локальную, я получаю правильные данные.
export class LightsComponent implements OnDestroy {
lightsValues;
private subscription: Subscription;
constructor(private mqttService: MqttService) {
this.subscription = this.mqttService.observe(TOPIC).subscribe((message: IMqttMessage) => {
let lightsValues = JSON.parse(message.payload.toString());
console.log(JSON.parse(message.payload.toString()));
console.log(lightsValues);
});
}
С этим кодом данные в обоих файлах console.logs верны - https://imgur.com/p2xnju9
Мне нужно передать эти правильные данные в мою глобальную переменную, поскольку она служит @Input для моего другого компонента.
<app-lights-preview [lightsValues]="lightsValues"></app-lights-preview>
Дочерний компонент:
export class LightsPreviewComponent {
@Input() lightsValues;
.
.
.