如何在node.js脚本中执行命令行参数

问题描述 投票:0回答:1

我对编程很陌生,我正在努力工作-也许这个问题确实不值得提出,但是由于..太久了,我没有取得任何进展。

我正在尝试使用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> }。我还不知道该怎么办。

  1. 存在此命令行参数arp -a,如果在命令行中执行,则会列出终端中网络中所有设备的所有ip地址。因此,它基本上可以完全满足我的要求,但是我需要在以下代码中使用该输出(我需要从该列表中找到智能插头的特定ip地址,但这是另一回事了)。

[如何获取此命令行参数,并在javascript代码/node.js脚本中执行它,然后将输出保存到变量/ const中?

最好的问候,迈克尔

javascript node.js search command-line discovery
1个回答
1
投票

[当函数返回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地址之前退出。


0
投票

当然值得一问! JS可能是一种令人困惑的语言。

如果函数返回一个Promise(如find一样),那么记录返回的内容通常不是很有用。承诺将使在某个时候能够潜在地提供某种有用的价值。

函数的.then部分是可以使用promise包含的值的地方。当Promise取回值时,它将运行.then中包含的功能。所以做类似的事情:

const find = require('local-devices');

// Find all local network devices.
find().then(devices => {
  console.log(devices);
})

意味着当找到设备的功能取回一个值时,它将记录该值。

© www.soinside.com 2019 - 2024. All rights reserved.