Javascript 如何修复“TypeError:(images | |[])。forEach不是函数”

Javascript 如何修复“TypeError:(images | |[])。forEach不是函数”,javascript,arrays,node.js,botframework,Javascript,Arrays,Node.js,Botframework,在Node.js MS Bot框架中,我试图迭代一个数组,该数组包含fetch返回的多个对象。它进行一次迭代,然后抛出一个错误 我已经从等式中提取了节点,并使用了对象的静态数组。我还尝试转换为数组。仍然是相同的结果:TypeError:images | |[]forEach在第一次迭代后不是一个函数 这就是目前缩短的对象值的可读性: // exact copy of what fetch returns let test = [ { title: 'Power BI De

在Node.js MS Bot框架中,我试图迭代一个数组,该数组包含fetch返回的多个对象。它进行一次迭代,然后抛出一个错误

我已经从等式中提取了节点,并使用了对象的静态数组。我还尝试转换为数组。仍然是相同的结果:TypeError:images | |[]forEach在第一次迭代后不是一个函数

这就是目前缩短的对象值的可读性:

// 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);
});
仅供参考,以下是我的fetch函数的一部分:

return fetch(url + question)
    .then(res => res.json())
    .then(jsonResponse => {
        return jsonResponse;
    })

我真的不知道现在还能尝试什么。同样的设置也适用于我的应用程序的旧版本-仅适用于axios,但我也尝试过。

无法确定图像| |[]的原因。如果不知道图像的定义位置/方式,forEach不是一个函数,但我会冒险猜测图像存在,它是一个对象而不是数组

尝试执行

const images = {};
images.forEach(image => console.log(image))
您将看到相同的结果,uncaughttypeerror:images.forEach不是一个函数


可能是对象中的images.data字段要运行forEach。

不可能确切地告诉您为什么要运行images | |[]。如果不知道images是如何定义的,forEach不是一个函数,但我要冒险猜测一下,说images是存在的,是一个对象而不是数组

尝试执行

const images = {};
images.forEach(image => console.log(image))
您将看到相同的结果,uncaughttypeerror:images.forEach不是一个函数


可能是对象中的images.data字段,您希望在其上运行forEach。

我运行了您的代码,它可以工作-这意味着测试数组不包含您认为它包含的内容,可能它包含fetch返回的承诺。使用fetch和await关键字来获取响应,再次使用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

我运行了您的代码,它工作了——这意味着测试数组不包含您认为它包含的内容,可能它包含了fetch返回的承诺。使用fetch和await关键字来获取响应,再次使用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

images | |[]forEach不在您发布的代码中的任何位置…?如果这是您得到的错误,显然images是真实的,但不是数组。也许你在考虑什么取函数?在你发布的代码中,你没有在任何地方使用承诺。@CertainPerformance确切地说,这就是为什么我完全搞不清这个错误是从哪里来的。我已经深入挖掘了Bot框架的源代码,这似乎是他们的CardFactory中的一个bug。但是,它们必须在一个数组中:images | |[]forEachimg:CardImage | string。这就是错误的来源。遗憾的是,bot框架文档在places.images | |[]中没有任何内容。forEach不在您发布的代码中…?如果这是您得到的错误,显然图像是真实的,但不是数组。也许你在考虑什么取函数?在你发布的代码中,你没有在任何地方使用承诺。@CertainPerformance确切地说,这就是为什么我完全搞不清这个错误是从哪里来的。我已经深入挖掘了Bot框架的源代码,这似乎是他们的CardFactory中的一个bug。但是,它们必须在一个数组中:images | |[]forEachimg:CardImage | string。这就是错误的来源。遗憾的是,bot框架文档在某些地方并不完善。生产代码中的测试或图像很可能是定义的,但不是数组。谢谢!事实证明,MS Bot Framework文档中存在一个错误,该文档指出可以将图像URL作为简单字符串发送,而实际上它们必须位于数组中。你认为在取回之前使用wait更好吗?我从来没有这样做过,也没有在任何地方看到过它,而且它工作得很好。其他所有东西都在使用await,我只是从来没有想过在异步函数中获取之前使用它。在我的小齿轮中,await很适合处理诸如获取返回的承诺。很可能,生产代码中的测试或图像已定义,但不是数组。谢谢!事实证明,MS Bot Framework文档中存在一个错误,该文档指出可以将图像URL作为简单字符串发送,而实际上它们必须位于数组中。你认为在取回之前使用wait更好吗?我从来没有这样做过,也没有在任何地方看到过它,而且它工作得很好。其他所有的东西都在使用wait,我只是从来没有想过在异步函数中获取之前使用它。在我的小齿轮中,wait很适合处理诸如获取返回的承诺。