JS 'body.forEach 不是函数' 上的错误

Posted

技术标签:

【中文标题】JS \'body.forEach 不是函数\' 上的错误【英文标题】:Error on JS 'body.forEach is not a function'JS 'body.forEach 不是函数' 上的错误 【发布时间】:2018-11-11 11:40:35 【问题描述】:

我是JS的新手,我无法解决这个问题,所以希望你能帮助我。 我将简要解释一下情况,我在我的 Raspberry 上安装了来自 Github 的应用程序 Homebridge:https://github.com/nfarina/homebridge

安装成功,所以,到目前为止一切顺利。但是后来我为 Homebridge 应用程序安装了插件 eWeLink:https://github.com/gbro115/homebridge-ewelink 安装也很顺利,但是在启动时插件中的 index.js 似乎有问题,我得到以下输出:

[2018-5-31 23:10:37] [eWeLink] 从本地缓存中总共加载了 [0] 个附件 [2018-5-31 23:10:37] [eWeLink] 请求 来自 eWeLink HTTPS API 的设备列表,位于 [https://eu-ota.coolkit.cc:8080] [2018-5-31 23:10:37] Homebridge 是 在端口 51826 上运行。 [2018-5-31 23:10:37] [eWeLink] eWeLink HTTPS API 报告总共注册了 [108] 台设备 /usr/lib/node_modules/homebridge-ewelink/index.js:98 body.forEach((设备) => ^

TypeError: body.forEach 不是一个函数 /usr/lib/node_modules/homebridge-ewelink/index.js:98:22 在 对象.parseBody (/usr/lib/node_modules/homebridge-ewelink/node_modules/request-json/main.js:74:12) 在 Request._callback (/usr/lib/node_modules/homebridge-ewelink/node_modules/request-json/main.js:148:26) 在 Request.self.callback (/usr/lib/node_modules/homebridge-ewelink/node_modules/request/request.js:186:22) 在 emitTwo (events.js:126:13) 在 Request.emit (events.js:214:7) 在 要求。 (/usr/lib/node_modules/homebridge-ewelink/node_modules/request/request.js:1163:10) 在 emitOne (events.js:116:13) 在 Request.emit (events.js:211:7) 在 传入消息。 (/usr/lib/node_modules/homebridge-ewelink/node_modules/request/request.js:1085:12)

所以终端告诉我 index.js 的第 98 行有一个错误,这将是脚本的下一部分:

var devicesFromApi = new Map();
var newDevicesToAdd = new Map();

body.forEach((device) => 
    platform.apiKey = device.apikey;
    devicesFromApi.set(device.deviceid, device);
);

// Now we compare the cached devices against the web list
platform.log("Evaluating if devices need to be removed...");

function checkIfDeviceIsStillRegistered(value, deviceId, map) 

    var accessory = platform.accessories.get(deviceId);

    if (devicesFromApi.has(deviceId)) 
        platform.log('Device [%s] is regeistered with API. Nothing to do.', accessory.displayName);
     else 
        platform.log('Device [%s], ID : [%s] was not present in the response from the API. It will be removed.', accessory.displayName, accessory.UUID);
        platform.removeAccessory(accessory);
    

我在 fromEach 函数中发现了一些类似的问题,但我似乎仍然无法弄清楚我应该在脚本中更改什么。

希望你能帮助我:)

【问题讨论】:

【参考方案1】:

body 不是一个数组,因此你不能在它上面调用.forEach,你可以尝试像这样转换它

Array.from(body).forEach(function (device) ...

看看这个可能有帮助的答案:forEach is not a function error with javascript array

【讨论】:

所以如果我是对的,我应该将第 98 行的脚本从:body.forEach((device) => platform.apiKey = device.apikey; devicesFromApi.set(device.deviceid , 设备); ); To: Array.from(body).forEach(function (device) platform.apiKey = device.apikey; devicesFromApi.set(device.deviceid, device); );

以上是关于JS 'body.forEach 不是函数' 上的错误的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: Object(...) 不是 index.js 上的函数

vm.handleClick 不是 vue.js 上的函数

字符串上的JS str.replace“不是函数”错误

在TypeScript中等待Foreach给出错误

SetState 不是 OnChange 上的函数

故事书:对象不是 Twig 组件上的函数