JSON.parse()为本地变量和全局变量返回不同的值

时间:2019-01-05 16:02:42

标签: json angular typescript parsing subscription

我正在使用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()分配给变量- https://imgur.com/RdDai1B

如您所见,所有对象的 light 参数设置为0, rgb 设置正确。

但是,当我将 lightsValues 变量更改为local时,我得到了正确的数据。

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;
.
.
.

0 个答案:

没有答案