首页 > 解决方案 > 如何从这个 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() 读取数据?

标签: node.js

解决方案


我想你需要.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;
});


推荐阅读