在Node.js(正在使用MS Bot Framework)中,我试图遍历包含fetch()
返回的多个对象的数组。 它执行一次迭代,然后抛出一个错误。
我确实已经从等式中删除了节点获取,并使用了对象的静态数组。我也尝试转换为数组。仍然是相同的结果:TypeError: (images || []).forEach is not a function
在第一次迭代后进展顺利。
这是当前的样子(缩短了对象值以提高可读性):
// exact copy of what fetch returns
let test = [
{
title: 'Power BI Desktop—Interactive Reports | Microsoft Power BI',
link: 'https://support.office.com/',
description: 'Create interactive reports with data',
thumbnail: 'https://powerbi.microsoft.com/'
}, {
title: 'What is Power BI administration? - Power BI',
link: 'https://support.office.com/',
description: 'Learn about the configuration of Power BI ',
thumbnail: 'https://docs.microsoft.com/'
}, {
title: 'Add a PowerBI tab to Teams',
link: 'https://support.office.com/',
description: 'You can add a new or existing PowerBI',
thumbnail: 'https://support.office.com/'
}
];
let cardContent = [];
test.forEach(element => {
logger.debug('working on: %j', element);
let card = CardFactory.heroCard(
element.title,
element.description,
element.thumbnail,
[element.link],
['Open Item']
);
cardContent.push(card);
});
仅供参考,这是我的提取函数的一部分:
return fetch(url + question)
.then(res => res.json())
.then(jsonResponse => {
return jsonResponse;
})
我真的不知道现在还能尝试什么。完全相同的设置适用于我的应用程序的旧版-仅适用于axios
,但我也尝试过。
答案 0 :(得分:4)
我运行了您的代码,并且该代码有效-这意味着test
数组不包含您认为包含的内容(可能包含fetch()返回的Promise)。使用带有await
关键字的fetch来获取响应,然后再次使用await
来获取json(类似于下面的代码-我将其写成head)
async function load(url, question) {
...
return await (await fetch(url + question)).json()
}
...
test = await load(url, question) // this call shoud be also inside async function
答案 1 :(得分:1)
在不知道(images || []).forEach
在何处/如何定义的情况下,无法确定为什么images
不是一个函数,但是我要冒昧地猜一个images
< em>存在,并且是对象而不是数组。
尝试执行
const images = {};
images.forEach(image => console.log(image))
您会看到相同的结果,Uncaught TypeError: images.forEach is not a function
。
也许是您要对其运行forEach
的对象中的images.data字段。