#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. Отлично! Спасибо, все работает так, как я и ожидал 🙂