Я работаю над проектом, использующим Angular6. Я три дня ломал голову над странной проблемой.
Проблема в том, что для одного и того же вызова API с переданными правильными параметрами я получаю разные ответы в двух браузерах (Chrome и Internet Explorer 11). Ответ Chrome отлично и обновляется.
Алгоритм:
У меня есть два метода
- populateProjectTimesheetUsers (): возвращает пользователей расписания с сервера.
- onSaveAddUserInstructionClick (): сохраняет нового пользователя в расписании.
Поток:
После сохранения пользователя в расписании с помощью «onSaveAddUserInstructionClick ()» вызывается «populateProjectTimesheetUsers ()», чтобы получить обновленные данные о пользователях на экране.
Выпуск:
В chrome функция populateProjectTimesheetUsers () извлекает обновленные данные, но в IE она возвращает старые данные, т.е. последний пользователь недоступен в последнем списке пользователей в IE.
Коды:
onSaveAddUserInstructionClick(){
this.addUserModel.WorkerId = this.addUserModel.Worker.Key;
this.adminTimeEntryService.addUserToInstruction(this.selectedProjectId, this.addUserModel.WorkerId).subscribe(
(response) => {
this.messageService.showMessage("success","User added to instruction successfully");
this.populateProjectTimesheetUsers(this.selectedProjectId);
this.addUserModalRef.hide();
},
(error) => {
this.handleError(error);
this.addUserModalRef.hide();
}
)
}
populateProjectTimesheetUsers(projectId = null) {
if (projectId != null) {
this.userGridRowData = [];
this.adminTimeEntryService.getTimesheetUsersByProjectId(projectId).subscribe(
(response) => {
this.serviceLineGridRowData = response.ServiceLines;
this.userGridRowData = response.Users;
console.log("this.userGridRowData1: " , this.userGridRowData);
console.log("response1: " , response );
for(let i=0; i< this.userGridRowData.length; i++){
this.userGridRowData[i].AddInstructionRate = "Add Instruction Rate";
this.userGridRowData[i].RemoveUserFromInstruction = "Remove User From Instruction";
}
console.log("this.this.userGridRowData2: " , this.userGridRowData);
console.log("response2: " , response );
setTimeout(()=>{
console.log("this.this.userGridRowData3: " , this.userGridRowData);
console.log("response3: " , response );
this.userGridApi.setRowData(this.userGridRowData);
this.serviceLineGridApi.setRowData(this.serviceLineGridRowData);
}, 0);
},
(error) => {
Logger.logError(`getTimesheetUsersByProjectId error: ${JSON.stringify(error.error)}`);
}
);
}
}
Попытки:
Я проверил, присваивая переменные одному
другой.
Я проверил асинхронность вызовов функций.
Обновил кеш
и т.д.
Но проблема все еще существует. Было бы здорово, если бы кто-то указал на проблему, чтобы мы могли учиться.
Может быть, я упускаю самую маленькую вещь, но что я не могу это выяснить?