Angular, Обещания: Не возвращайте обещание, пока партия не будет завершена - PullRequest
0 голосов
/ 01 марта 2020

TL; DR Мне нужно прочитать 3 файла из S3. Я использую Promises, и я не хочу, чтобы они «возвращались», пока они не вернутся

У меня есть код, который я использую для чтения из S3 в настройке Angular. Это выглядит примерно так:

return new Promise((resolve, reject) => {
  const s3 = new AWS.S3({
    apiVersion: '2006-03-01',
    params: {
      Bucket: this._bucketKey,
      Key: this._someKey
    }
  });
  s3.config.update({credentials: AWS.config.credentials});
  s3.getObject((err, data) => {
    ...
     }
   });
 });

}

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

readMultipleKeys(s3Keys:[]): Promise<any> {
    data.forEach( value => {
       "read value key from S3"
   });

   // resolve after all the array items in data have been requested and returned
}

Любая помощь с благодарностью

1 Ответ

1 голос
/ 01 марта 2020

Допустим, у вас есть метод getFileFrom Aws (), который принимает S3key и выполняет http-вызов для получения файла из хранилища S3. Ваше ожидаемое решение будет выглядеть следующим образом.

getFileFromAws(s3Key) {
  // Perform the HTTP call to get the file like below
  // return this.http.get(url, httpOptions).toPromise();
}

async readMultipleKeys(s3Keys:[]) {
  let files = await Promise.all(s3Keys.map(key => getFileFromAws(key)));
  console.log(files);
  // now the files array contains 3 files if you passed 3 keys to this method

  // Perform your logic
}

Я создал демонстрационное приложение Stackblitz , чтобы показать метод Promise.all.

...