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 不是函数' 上的错误的主要内容,如果未能解决你的问题,请参考以下文章