Обещания и Observables для загрузки нескольких файлов, используя шаблон асинхронного ожидания - Ionic 3, Firebase - PullRequest
0 голосов
/ 26 августа 2018

Я использую async / await в цикле for для ожидания метода get, который имеет наблюдаемую внутреннюю часть .. Поэтому я заключаю его в обещание, которое разрешается, когда наблюдаемые получают данные, а затем отписывается с помощью take (1) operator ..

async addImgStorage(postId, base64data) {
    let urls = [];
    for (let i = 0; i < base64data.length; i++) {
      const file = "data:image/jpg;base64," + base64data;
      const filePath = "img/" + postId + "_" + i;
      let url = await this.getUrl(filePath, file);
      urls.push(url);
    }
    this.addImagen(postId, urls);
  }

 getUrl(filePath, file) {
    return new Promise((resolve, reject) => {
      const ref = this.storage.ref(filePath);
      ref.putString(file, "data_url").then(() => {
        const downloadURL = ref
          .getDownloadURL()
          .pipe(take(1))
          .subscribe(url => {
            if (url) {
              resolve(url);
              console.log("url from get", url);
            }
          });
      });
    });
  }

 addImagen(postId, urls) {
    const imagen: Imagen = {
      postId: postId,
      img: { ...urls }
    };
    this.afDB.list("imagenes").push(imagen);
  }

приведенный выше код работает нормально, если длина base64data равна 1, но выдает следующую ошибку, когда его длина> 1

Ошибка: Uncaught (в обещании): [объект Объект]

...