【发布时间】:2020-09-20 22:35:16
【问题描述】:
我正在尝试实现网络发现搜索,该搜索返回与我的本地网络链接的所有设备。 到目前为止,我的代码如下所示:
const find = require('local-devices');
// Find all local network devices.
find().then(devices => {
console.log(devices);
})
并且控制台中返回的数组是这样的:
[
{ name: '?', ip: '192.168.0.174', mac: '00:17:88:65:f4:4d' },
{ name: '?', ip: '192.168.0.222', mac: '80:be:05:73:bc:g5' },
{ name: '?', ip: '192.168.0.190', mac: '0c:fe:45:4d:b8:28' }
]
所以,我已经知道我正在寻找的设备的 Mac 地址,我的问题是,如何在数组中搜索 mac 地址,并返回该设备的特定 IP 地址? 例如,我将 mac 地址“00:17:88:65:f4:4d”传递给函数,该函数应返回“192.168.0.174”,我可以将其保存在变量中并在以下代码中使用。
我也许可以使用 find() 函数解决这个问题,但是我如何告诉代码,我只想要 ip 地址,而不是保存数组的完整元素? 我想到了类似的东西:
const ip = devices.find('00:17:88:65:f4:4d');
但这只会返回完整的元素,如果语法正确的话。
【问题讨论】:
-
你不能真正按照你的要求去做。您使用的包是异步的。您可以在
.then()回调内部识别设备,但不能将其包装在同步获取特定 IP 地址的函数中。 -
现在我明白了,谢谢 Pointy 我删除了我的代码
-
啊,我明白了问题所在。由于我没有立即填充所有 ip 地址的数组,并且它需要一些时间才能填充,我不能立即尝试从这个数组中找到一个 ip 地址?有没有类似“等待”的功能,它给代码 5 秒,直到它尝试执行以下命令?
-
您不能将异步 API 变成同步 API。 JavaScript 中没有“等待”或“睡眠”。您必须构建您的代码以接受该语言的异步特性。
标签: javascript arrays search find