Загрузка данных в массив при успешном ответе на вызов AJAX приводит к добавлению последних данных несколько раз - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь просто добавить данные в массив при успешном ответе загрузки файла.В консоли цикла выдается правильный вывод, но результирующий массив состоит из реплицированных данных (последние данные повторяются n раз)

 data : consists of multiple file data that has to be uploaded

пример:

FileList {0: File, 1:Файл, длина: 2} 0: Файл {имя: "demoform1.pdf", lastModified: 1565685422300, lastModifiedDate: вт 13 августа 2019 14:07:02 GMT + 0530 (стандартное время Индии), webkitRelativePath: "", размер: 20061,…} 1: Файл {name: "dummy.pdf", lastModified: 1565260694049, lastModifiedDate: Чт, 08 августа 2019 16:08:14 GMT + 0530 (стандартное время Индии), webkitRelativePath: "", размер: 13264,…}длина: 2

Метод:

 uploadToServer(data) {
for ( let i = 0 ; i < data.length ; i++ ) {

  const fileType = this.fileValidations.getFileExtension(data[i].name);
  const filetype = {file_type : fileType};
  const data1 = {file : data[i]};
  let uploadFormData;
  uploadFormData = (Object as any).assign({}, data1, filetype);

  this.fileUploadService.uploadFile(uploadFormData).subscribe(res => {
    this.documentCount = this.documentCount + 1;

    const currentFileName = data[i].name;
    this.documentDetailsObj.name = res.original_name;
    this.documentDetailsObj.id = res.id;
    this.documentNameArr.push((this.documentDetailsObj));


    console.log(this.documentNameArr);

    // Expected output : 
    // 0: {name: "pdf1.pdf", id: 1}
    // 1: {name: "pdf2.pdf", id: 2}

    // Current Output :
    // 0: {name: "pdf2.pdf", id: 2}
    // 1: {name: "pdf2.pdf", id: 2}





  }, error => {
    console.log('error');
  });
}

}

1 Ответ

0 голосов
/ 23 сентября 2019

Здесь вы передаете объект в следующей итерации, тот же объект обновляется путем передачи по ссылке.

this.documentDetailsObj.name = res.original_name;
this.documentDetailsObj.id = res.id;
this.documentNameArr.push((this.documentDetailsObj));

Вы можете просто создать объект и вставить его в одну строку без необходимости дополнительных переменных

this.documentNameArr.push({name: res.original_name, id: res.id});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...