Как подождать, пока все данные будут загружены в хранилище Firebase (Firestore)?

Я делаю легкую приборную панель в Vue с Firestore и Storage. Я не профессионал, поэтому я застрял в чем-то, что должно быть легко. У меня есть одна функция, которая должна получать все URL-адреса на основе имен файлов (так работает Storage)

getImages: function(uid, images) {        
    images.forEach((filename) => {
        var ref = firebaseApp.storage().ref('images/' + uid + "/" + filename);
        ref.getDownloadURL().then(function(url) {   
          this.finalImages.push(url)
          console.log(url);
        }).catch(function(error) {
          switch (error.code) {
            case 'storage/object_not_found':
              // File doesn't exist
              console.log('Object not found');
              break;

            case 'storage/unauthorized':
              // User doesn't have permission to access the object
              console.log('You do not have the right permissions');
              break;

            case 'storage/canceled':
              // User canceled the upload
              console.log('Canceled');
              break;

            case 'storage/unknown':
              // Unknown error occurred, inspect the server response
              console.log('Who knows...');
              break;
          }
        })
    })
  }

Но загрузка URL после завершения кода, поэтому я их никогда не вижу. Как я могу остановить все и дождаться появления URL-адресов в finalImagesмассиве и продолжить?

javascript,firebase,vue.js,google-cloud-firestore,firebase-storage,

0

Ответов: 1


1 принят

Вы можете сопоставить каждый запрос с обещанием, а затем выполнить все обещания:

getImages: function(uid, images) {        
  Promise.all(images.map((filename) => {
    return new Promise((resolve, reject) => {
      var ref = firebaseApp.storage().ref('images/' + uid + "/" + filename);
      ref.getDownloadURL().then(function(url) {
        resolve(url);
      }).catch(function(error) {
        // Uncomment this line to ignore errors.
        reject(error);
        switch (error.code) {
          case 'storage/object_not_found':
            // File doesn't exist
            console.log('Object not found');
            break;

          case 'storage/unauthorized':
            // User doesn't have permission to access the object
            console.log('You do not have the right permissions');
            break;

          case 'storage/canceled':
            // User canceled the upload
            console.log('Canceled');
            break;

          case 'storage/unknown':
            // Unknown error occurred, inspect the server response
            console.log('Who knows...');
            break;
        }
      })
    });
  })).then((finalImages) => {
    // all images.
  })
}
JavaScript, firebase, vue.js, Google облако-Firestore, firebase-хранения,
Похожие вопросы