如何解决“ TypeError :(图像|| []]。forEach不是函数”

时间:2019-04-09 21:56:07

标签: javascript arrays node.js botframework

在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,但我也尝试过。

2 个答案:

答案 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字段。