node.js - 如何从这个 Promise.all() 中提取数据?获取 TypeError:将循环结构转换为 JSON
问题描述
我有两个要使用 Promise.all() 运行的函数
var query1 = s3.headObject(getMetaData);
var query2 = s3.listObjects(searchBucket);
Promise.all([query1, query2]).then(data => {
console.log(JSON.stringify(data));
}).catch(err => {
if (err) throw err;
});
当我尝试读取数据时,我得到了一个TypeError: Converting circular structure to JSON
.
当我使用如下简单的回调方法时:它有效
s3.headObject(getMetaData, function(err, data){
if (err) throw err;
console.log("MetaData: " + JSON.stringify(data);
});
s3.listObjects(searchBucket, function(err, data) {
if(err) throw err;
console.log("Bucket: " + JSON.stringify(data));
});
两个回调方法的响应 JSON 都具有相同的格式:
{
"AcceptRanges": "bytes",
"LastModified": "2020-01-19T13:28:55.000Z",
"ContentLength": 97032,
"ETag": "\"4236c584667a87cc28a9a6c62ddd3d9a\"",
"ContentType": "image/jpeg",
"Metadata": {
"expected_num_images": "3",
"event_id": "5"
}
}
如何使用上述两个函数从 Promise.all() 读取数据?
解决方案
我想你需要.promise()
在最后做。像这样的东西
var query1 = s3.headObject(getMetaData).promise();
var query2 = s3.listObjects(searchBucket).promise();
Promise.all([query1, query2]).then(data => {
console.log(JSON.stringify(data));
}).catch(err => {
if (err) throw err;
});
推荐阅读
- google-bigquery - BigQuery Google Ads 传输配置删除
- laravel - 如何在迁移中手动删除和重新创建数据库?
- java - 从 Java 列表中显示特定类型披萨的方法
- python - 等待 FastAPI 表单上传后再渲染新页面以防止崩溃
- php - 尝试在 laravel 中捕获块
- python - 重命名列时如何向列表理解添加逻辑?
- python - 如何将 jquery 变量传递给自定义 django 模板标签?
- python - Use Python to get robot to respond to button press
- magento2 - Magento 2.4:无法应用数据补丁 Magento\CatalogRuleSampleData\Setup\Patch\Data\InstallCatalogRuleSampleData
- python - Gives me an error while adding a column to a data source