дождитесь обещаний внутри, чтобы l oop закончился. Angular 7 / Машинопись - PullRequest
0 голосов
/ 17 февраля 2020

Я работаю с Angular 7, и у меня есть функция, которая имеет обещание и сохраняет результат в массиве, подобном этому:

appendImage(item){

this.imageCompress.compressFile(item, 50, 50).then(
  result => {
    this.compressedImages.push(result);
    return this.compressedImages;
  });

}

И я ' Я вызываю эту функцию / обещание из другой функции, которая имеет значение для l oop:

async compressFiles() {

if(this.elementsSelected.length > 0){
 for(let i = 0; i < this.elementsSelected.length; i++){
   let actual = this.elementsSelected[i].src;
   let res = await this.appendImage(actual);
   console.log(res);
 }

  return this.compressedImages;

}else{
  console.warn("No Images Selected");
}

}

И мне нужно вернуть массив, когда все вызовы обещания заканчиваются. Когда я печатаю массив из функции appendImage(), я получаю массив точно так, как хотел, но при выполнении console.log(res) я получаю undefined. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Вы не возвращаетесь из appendImage.

Попробуйте использовать приведенную ниже функцию asyn c.

async appendImage(item) {
    const result = await this.imageCompress.compressFile(item, 50, 50);
    this.compressedImages.push(result);
    return this.compressedImages;
}
0 голосов
/ 17 февраля 2020

Чтобы должным образом ожидать выполнения своей функции, вам нужно вернуть обещание.

appendImage(item){

this.imageCompress.compressFile(item, 50, 50).then(
  result => {
    this.compressedImages.push(result);
    return this.compressedImages;
  });
}

должно быть

appendImage(item){
// this is a promise, and you need to return it, in order to use await
return this.imageCompress.compressFile(item, 50, 50).then(
  result => {
    this.compressedImages.push(result);
    return this.compressedImages;
  });
}
...