我对编程很陌生,我正在努力工作-也许这个问题确实不值得提出,但是由于..太久了,我没有取得任何进展。
我正在尝试使用node.js脚本在连接到本地网络的所有设备上进行发现搜索。
我找到了该npm模块,该模块可以完成这项工作:https://www.npmjs.com/package/local-devices/v/3.0.0
所以我只是试图复制并粘贴他们在网络中搜索所有设备的示例:
const find = require('local-devices');
// Find all local network devices.
find().then(devices => {
devices /*
[
{ name: '?', ip: '192.168.0.10', mac: '...' },
{ name: '...', ip: '192.168.0.17', mac: '...' },
{ name: '...', ip: '192.168.0.21', mac: '...' },
{ name: '...', ip: '192.168.0.22', mac: '...' }
]
*/
})
但是如果我现在运行脚本,什么也不会发生。
到目前为止,我已经尝试过:1.我试图将输出保存为常量,并尝试在控制台上输出]
const found = find().then(devices => {
devices
/*[
{ name: '?', ip: '192.168.0.10', mac: '...' },
{ name: '...', ip: '192.168.0.17', mac: '...' },
{ name: '...', ip: '192.168.0.21', mac: '...' },
{ name: '...', ip: '192.168.0.22', mac: '...' }
]
return devices
})
console.log(found);
然后控制台输出为Promise { <pending> }
。我还不知道该怎么办。
arp -a
,如果在命令行中执行,则会列出终端中网络中所有设备的所有ip地址。因此,它基本上可以完全满足我的要求,但是我需要在以下代码中使用该输出(我需要从该列表中找到智能插头的特定ip地址,但这是另一回事了)。 [如何获取此命令行参数,并在javascript代码/node.js脚本中执行它,然后将输出保存到变量/ const中?
最好的问候,迈克尔
[当函数返回Promise
时,表示它正在异步运行(网络上有很多关于此的教程)。长话短说,find()
函数将立即返回一个Promise
对象,然后它将去查找IP地址,一旦找到它,它将填充Promise
(即fulfill
它)。
then()
部分是在实现承诺后将执行的回调。因此,您可以做的是:
const find = require('local-devices');
// Find all local network devices.
const found = find().then(devices => {
console.log(devices);
})
await found;
基本上是await
告诉JS等待found
Promise对象实现-现在,JS只是在找到IP地址之前退出。
当然值得一问! JS可能是一种令人困惑的语言。
如果函数返回一个Promise(如find
一样),那么记录返回的内容通常不是很有用。承诺将使在某个时候能够潜在地提供某种有用的价值。
函数的.then
部分是可以使用promise包含的值的地方。当Promise取回值时,它将运行.then
中包含的功能。所以做类似的事情:
const find = require('local-devices');
// Find all local network devices.
find().then(devices => {
console.log(devices);
})
意味着当找到设备的功能取回一个值时,它将记录该值。