JSON.parse () возвращает разные значения для локальной и глобальной переменной - PullRequest
0 голосов
/ 05 января 2019

Я работаю над приложением 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;
.
.
.
...