首页 > 解决方案 > 如何在 node.js 脚本中执行命令行参数

问题描述

我对编程很陌生,我正在努力努力——可能这个问题真的不值得问,但我没有取得任何进展,因为……太久了。

我正在尝试在 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 中?

最好的问候,迈克尔

标签: javascriptnode.jssearchcommand-linediscovery

解决方案


当一个函数返回 aPromise时,它意味着它正在异步运行(网上有各种关于此的教程)。长话短说,该find()函数将立即返回一个Promise对象,然后它会去查找 IP 地址,一旦找到它就会填充Promise(即fulfill它)。

then()部分是在 Promise 完成后执行的回调。所以你可以做的是:

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

async function findIP() {
  // Find all local network devices.
  const found = find().then(devices => {
    console.log(devices);
  })

  await found;
}

findIP();

本质上await是告诉 JS 等到foundPromise 对象完成 - 现在 JS 只是在找到 IP 地址之前退出。


推荐阅读