У меня есть простой сервис делает несколько получать запросы:Angular2 значения обновления из запроса HTTP
getDevices() {
return this.http.get('https://api.particle.io/v1/devices')
.map((response: Response) => response.json());
}
getVariable(deviceId: string) {
return this.http.get('https://api.particle.io/v1/devices/' + deviceId + '/running')
.map((response: Response) => response.json());
}
В моем компоненте у меня есть следующая функция, которая извлекает устройства и добавляет переменные из GetVariable для каждого устройства в этом. устройства.
getDevicesAndRunning() {
function callback(array, data, res) {
array.push(Object.assign(data, {"running": res.result}))
}
this.photonService.getDevices()
.subscribe(
data => {
const myArray = [];
for (var i=0; i<data.length; i++) {
if (data[i].connected) {
console.log(data, i);
this.photonService.getVariable(data[i].id)
.subscribe(
callback.bind(this, myArray, data[i])
);
};
}
this.devices = myArray;
}
);
}
Затем я могу назвать getDevicesAndRunning()
, чтобы обновить список устройств и перебирать их в представлении. В настоящее время я делаю это в OnInit
и всякий раз, когда пользователь нажимает кнопку. Тем не менее, поскольку this.devices
получает repopulated каждый раз, когда функция называется пользователем, пользователь видит пустой список, хотя бы длинный запрос, требуемый для ответа. Все, что я хочу, это для обновления res.result
, а не для всего массива.
Это звучит как приемлемое решение, однако у меня возникают проблемы с клонированием старого массива в новый. Это должно произойти внутри функции подписки getDevices, правильно? В противном случае старый массив не будет заполнен, прежде чем мы попытаемся его объединить? По какой-то причине this.devices = this.oldDevices.slice(); возвращает undefined, даже если это происходит после заполнения старыхDevices. – amunds
Я бы не попробовал сплайсировать его, на самом деле я использую только сплайсинг и срез (исправления на месте), когда мне нужно (некоторые поисковые/сортировочные файлы и еще много чего). Опять же, оставьте старую в покое и постройте новую с нее, используя карту, фильтр и т. Д. –
Также помните, что угловой.копия - ваш друг. EZ копии. Если вам нужны глубокие копии, вы тоже можете это сделать, небольшой поиск по теме покажет вам путь. –