Индикатор к переменной в массиве вместо переменной в угловом

#arrays #angular #typescript

Вопрос:

У меня есть следующая часть моего кода:

 private engineSpeed = 0;
private gearboxTemp = 0; 
private engine = {
  "Temp1" : ["30 °C", "30 °C", "30 °C"],
  "Param" : ["17.23 kPa", "1200 m³/min", "0.7 kg/m³", "55 °C"],
  "Speed" : [this.engineSpeed   " rpm"]
}


ngOnInit(): void {
  this.dataWatchdog = setInterval(async () => {  
    this.engineSpeed = await this.getEngineSpeed()
  }, 5000)
}


public button()
{
    console.log("Speed ", this.engine["Speed"])
    console.log("Engine speed", this.engineSpeed )
}
 

Я обновляю this.engineSpeed переменную в каждом 5s в dataWatchdog. Но все равно в массиве движка this.engineSpeed значение не обновляется, и в console.log я получаю 0 .

Результат в консоли

Возможно ли иметь указатель на this.engineSpeed переменную в массиве вместо простой переменной и обновлять ее? Заранее спасибо

Комментарии:

1. 1) Ваша асинхронность/ожидание не кажется уместным. getEngineSpeed() 2) Если вы обновляете this.engineSpeed , вам нужно обновить вручную this.engine.Speed[0] , вы можете сделать это в set engineSpeed(newValue) методе, чтобы поддерживать его в актуальном состоянии

2. 1) getEngineSpeed() просто считывает значение из базы данных, здесь это не имеет значения, я просто хотел показать, что значение постоянно обновляется. 2) Это печально, потому что я хотел добавить много переменных, подобных этой, и, возможно, изменить их положение так, чтобы это.движок. Скорость[0] не всегда будет работать,потому что иногда это может быть похоже на {«Скорость» : [эта.Скорость двигателя «об / мин»]} или «Скорость» : [эта.Скорость двигателя 1 «об / мин», эта.Скорость двигателя 2 «об / мин»], и тогда я не хочу ставить этот.двигатель. Скорость[0] и это.двигатель. Скорость[1]

3. так что решение @kruschid кажется лучшим способом сделать это 😉

Ответ №1:

Присвоение нового значения this.engineSpeed не приводит к неявному обновлению значения this.engine.Speed[0] , поскольку значение this.engineSpeed " rpm" интерпретируется только один раз и содержит копию начального значения this.engineSpeed . Вы могли this.engine.Speed[0] бы в обязательном порядке обновить свой «сторожевой пес», создать getSpeed метод или сделать что-то подобное:

 private engine = {
  // ...
  "Speed" : () => [this.engineSpeed   " rpm"] // Speed is now a function
}

public button()
{
    console.log("Speed ", this.engine["Speed"]())
    console.log("Engine speed", this.engineSpeed )
}
 

Комментарии:

1. Отлично! Спасибо, все работает так, как я и ожидал 🙂