angular - Angular,Promises:在批处理完成之前不要返回承诺
问题描述
TL;DR 我必须从 S3 读取 3 个文件。我正在使用 Promises,我不希望它们“返回”,直到它们全部返回
我有用于在 Angular 设置中从 S3 读取的代码。它看起来像这样:
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
}
任何帮助是极大的赞赏
解决方案
假设您有一个名为“getFileFromAws()”的方法,它接收 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 方法。
推荐阅读
- r - 使用 {data.table} 自定义 {drake} 计划
- sql - 制作有效的横向连接(或替代方法)
- excel - 如何让我的 excel 电子表格采用无组织的列并将其分组为几个带有公式的小列表?
- javascript - 如何使用 Javascript-nodejs 使用 wd 驱动程序在 Andriod Appium 中向上/向下滚动?
- swift - Swift Core Data Double 不接受十进制数
- rust - How to implement a Rust function that returns a Python object using PY03
- python - Python 错误“AttributeError 模块‘字符串’没有属性‘lstrip’”
- android - 带有待处理 URL-Intent 的 Android 通知 - 仅通过单击通知
- c# - Kusto 使用 C# {kusto.data} 与集群连接
- logstash - 我可以在读取文件后删除文件,或者在处理完所有文件后通知吗?