Firebase storage / Javascript обещание: получение URL-адресов загруженных фотографий в точном порядке их загрузки - PullRequest
0 голосов
/ 24 марта 2020

Я пишу веб-приложение на основе Firebase, и вот что я пытаюсь сделать:

  1. Пользователь загружает несколько фотографий.
  2. Пользователь выбирает порядок фотографий для будет отображаться в его / ее сообщениях.
  3. Пользователь запускает действие загрузки.
  4. Изображения загружаются в порядке, указанном в шаге # 2, а затем URL-адреса сохраняются в базе данных, так что они показаны в следующем порядке.

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

const url_array_get = () => {
    const user=firebase.auth().currentUser;
    const photos1 = photoorder.map(position => photos[position - 1]); //Code to reshuffle the photos according to the order the user has set
    const ref=firebase.storage().ref('data/'+user.uid+'/posts/');
    let promises = photos1.map((p1) => { //Trigger upload for each of the photo in the intended order
        console.log('uploading :',p1);
        return ref.child(p1.name).put(p1).then((snapshot) => {
            console.log('getting url :',p1);
            return snapshot.ref.getDownloadURL();
        })
    });
    return Promise.all(promises);
}

Однако проблема в том, что когда я смотрю на результаты console.log, код загружает фотографии в заданном порядке, но URL-адреса не загружаются в заданном порядке ... и, следовательно, не отображаются в заданном заказать также. Я предполагаю, что это потому, что часть загрузки выполняется асинхронно, и, следовательно, меньшие фотографии получают URL-адреса быстрее.

Как я могу исправить код, чтобы получить URL-адреса в нужном порядке? Я предполагаю, что хитрость заключается в том, чтобы инициировать следующую загрузку только после загрузки URL-адреса для предыдущей загрузки, но я новичок в программировании, и мне сложно переписать приведенный выше код.

Любой совет? Буду очень признателен!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...