#angular
Вопрос:
Пытаюсь понять, как это должно работать. Я использую настройку микросервиса spring, и этот вызов угловой службы обновляет одну запись:
Угловой сервис:
save(recordModel) {
recordModel.lastUpdated = new Date();
recordModel.whoUpdated = this.loginService.getUserId();
this.dataService.httpPut(recordModel._links.self.href, recordModel).subscribe(resp => { },
(resp) => {
this.logger.error("Save Failed", resp);
this.dialogError(resp);
});
}
Мне нужна возможность обновлять определенные атрибуты json для всех записей в БД:
updateAttributeIds(interfaceName: string) {
this.logger.info("Updating Attribute Id's");
let syncIssues = 0;
for (let i = 0; i < this.dataSource.length; i ) {
if(this.dataSource[i].attributes.attributeId != this.dataSource[i].id) {
syncIssues ;
if(this.dataSource[i].attributes.interfaceName === interfaceName) {
this.dataSource[i].attributes.attributeId = this.dataSource[i].id;
this.logger.info("Updating", this.dataSource[i].id);
this.save(this.dataSource[i]);
}
}
}
this.logger.warn("Updating Attribute Id's", syncIssues);
}
Это, кажется, работает, но этот.save(этот.источник данных[i]); не ждет обещания, и я пытаюсь выяснить, нужно ли это, прежде чем он попытается обновить следующую запись. Такое ощущение, что в большом наборе данных в конце концов у меня закончатся ресурсы — или потоки? Просто непонятно, что происходит на самом деле.
Спасибо
Комментарии:
1. Допустим, для отправки и получения ответа на каждое сохранение требуется 5 мс (что, вероятно, довольно хорошо). Если вы хотите обновить 1000 строк последовательно, отправив еще одну после того, как ответила предыдущая, для отправки всех данных потребуется 0,5 секунды. при 100 000 строках для завершения потребуется 8,333 минуты. Кроме того, если вы отправили 100 строк, а сервер на мгновение отключился или иным образом не отвечал,
this.dialogError(resp);
пользователь может 100 раз отобразить диалоговое окно с ошибкой, если вы не учитываете несколько вызовов.2. Вы также используете здесь наблюдаемое, а не обещание. В любом случае, по умолчанию они оба неблокируются, иначе говоря, код продолжает выполняться, не дожидаясь их завершения. Это может быть хорошим экспериментом для вас, чтобы проверить систему на стресс. Отправьте огромное количество строк и посмотрите, что произойдет.
3. Хорошо, устраните проблему с dialogError(соответственно), спасибо, что указали на это. Таким образом, неблокирующие вызовы будут продолжать стоять в очереди и выполняться, и мой перехватчик http покажет мне, что все еще обрабатывается, что и должно произойти, но да-я собираю больший набор данных — это то, что я сейчас нахожусь на меньшем сервере прямо сейчас. Спасибо