如何修复“类型错误:(图像 || []).forEach 不是函数”

Mal*_*lte 2 javascript arrays node.js botframework

在 Node.js(正在使用 MS Bot Framework)中,我尝试迭代包含 . 返回的多个对象的数组fetch()它执行一次迭代,然后抛出一个错误。

\n\n

我确实已经将节点获取从等式中剔除,并使用了对象的静态数组。我也尝试转换为数组。结果还是一样:TypeError: (images || []).forEach is not a function第一次迭代进展顺利。

\n\n

这是目前的样子(为了可读性缩短了对象值):

\n\n
// exact copy of what fetch returns\nlet test = [\n    {\n        title: 'Power BI Desktop\xe2\x80\x94Interactive Reports | Microsoft Power BI',\n        link: 'https://support.office.com/',\n        description: 'Create interactive reports with data',\n        thumbnail: 'https://powerbi.microsoft.com/'\n    }, {\n        title: 'What is Power BI administration? - Power BI',\n        link: 'https://support.office.com/',\n        description: 'Learn about the configuration of Power BI ',\n        thumbnail: 'https://learn.microsoft.com/'\n    }, {\n        title: 'Add a PowerBI tab to Teams',\n        link: 'https://support.office.com/',\n        description: 'You can add a new or existing PowerBI',\n        thumbnail: 'https://support.office.com/'\n    }\n];\n\nlet cardContent = [];\ntest.forEach(element => {\n    logger.debug('working on: %j', element);\n    let card = CardFactory.heroCard(\n        element.title,\n        element.description,\n        element.thumbnail,\n        [element.link],\n        ['Open Item']\n    );\n    cardContent.push(card);\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

仅供参考,这是我的 fetch 函数的一部分:

\n\n
return fetch(url + question)\n    .then(res => res.json())\n    .then(jsonResponse => {\n        return jsonResponse;\n    })\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

Kam*_*ski 5

我运行你的代码并且它有效 - 这意味着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
Run Code Online (Sandbox Code Playgroud)