FireBase getSignedUrl внутри цикла - PullRequest
       7

FireBase getSignedUrl внутри цикла

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

Мне нужно получить URL всех файлов в пути 'bucket /load /: loadID'. Я могу получить эти файлы в массиве, называемом «файлы». Затем я фильтрую его (получаю массив endFiles). И теперь мне просто нужен новый массив с именем url, чтобы pu sh всех URL-адресов в (getSignedUrl). Но я не знаю, как это сделать. Мне нужно получить подписанные URL-адреса внутри al oop (endFiles.forEach) и pu sh в массив URL-адресов или что-то в этом роде.

exports.testCloudFunc = functions.storage.object().onFinalize(async object => {
  const filePath = object.name;

  const { Logging } = require('@google-cloud/logging');
  console.log(`Logged: FILEPATH: ${filePath}`);
  const id = filePath.split('/');
  console.log(`Logged: ID: ${id[0]}/${id[1]}`);
  const bucket = object.bucket;
  console.log(`Logged: BUCKET: ${object.bucket}`);

  async function listFilesByPrefix() {
    const options = {
      prefix: id[0] + '/' + id[1]
    };
    const [files] = await storage.bucket(bucket).getFiles(options);

    const endFiles = files.filter(el => {
      return (
        el.name === id[0] + '/' + id[1] + '/' + 'invoiceReport.pdf' ||
        el.name === id[0] + '/' + id[1] + '/' + 'POD.pdf' ||
        el.name === id[0] + '/' + id[1] + '/' + 'rateConfirmation.pdf'
      );
    });

    for (let i = 0; i < endFiles.length; i++) {
      console.log(endFiles[i].name);
    }
  }
  listFilesByPrefix().catch(console.error);
});

Я застрял и мне нужна помощь. Любая помощь высоко ценится.

1 Ответ

1 голос
/ 04 февраля 2020

Метод getSignedUrl() является асинхронным и возвращает Обещание.

Поскольку вы хотите одновременно выполнить несколько вызовов этого метода, вам необходимо использовать Promise.all() следующим образом:

  async function listFilesByPrefix() {
    const options = {
      prefix: id[0] + '/' + id[1]
    };
    const [files] = await storage.bucket(bucket).getFiles(options);

    const endFiles = files.filter(el => {
      return (
        el.name === id[0] + '/' + id[1] + '/' + 'invoiceReport.pdf' ||
        el.name === id[0] + '/' + id[1] + '/' + 'POD.pdf' ||
        el.name === id[0] + '/' + id[1] + '/' + 'rateConfirmation.pdf'
      );
    });

    const config = {
       action: 'read',
       expires: '03-17-2025'
    };

    const promises = [];
    for (let i = 0; i < endFiles.length; i++) {
      console.log(endFiles[i].name);
      promises.push(endFiles[i].getSignedUrl(config));
    }

    const urlsArray = await Promise.all(promises);  

    return urlsArray;
  }


  listFilesByPrefix()
  .then(results => {
     //results is an array of signed URLs
     //It's worth noting that values in the array will be in order of the Promises passed with promises.push()
     //do whatever you need, for example:
     results.forEach(url => {
         //....
     });
   })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...