[英]API response is array of arrays. The first array being the key in key-value pair of an object
[英]Express API only returns first key value pair of object
我正在获取嵌套对象数据。 我可以在控制台上获取该对象数据,但是当我尝试获取像return res.json(imageObject)
这样的数据时,我只能得到该对象的第一个键值对。 这是控制台的错误。 UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
。 控制台数据是这样的{ bigImage: 'https://url.com' }
router.get("/", async(req, res) => { //...fetch data if (mediaData.type === "type1") { let allData = await mediaData.media; allData.map(async(Data) => { if (Data.imageType === "big") { let bigImage = await Data.url; let imageObject = { bigImage }; console.log(imageObject); return res.json(imageObject); } }); } });
您在.map
中使用res
,它将为您正在迭代的数组中的每个项目触发一次。
你不能那样做。 您只能对每个req
使用res
一次,因为您正在回复浏览器。 如果你多次使用它,你会得到这个错误,这意味着它已经被使用过并且你已经回复了。
解决方案:使用res
一次,而不是在map
。
此外, .map
在这里没用,因为您对它产生的结果不感兴趣。 您应该使用forEach
甚至更好的for
循环(在条件下可破坏)。
你应该使用for..of
。
它将在 return 语句处停止执行您的函数
router.get("/", async(req, res) => {
//...fetch data
if (mediaData.type === "type1") {
let allData = await mediaData.media;
let pendingResult = allData.filter(data => data.imageType === "big").map(async item => {
let bigImage = await item.url;
return { bigImage }
});
let result = await Promise.all(pendingResult);
res.json(result);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.