You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS调用mikronode执行ping后如何将返回JSON数据从主函数返回使用

实现方案

你的问题核心是代码中涉及的设备连接、ping请求都属于异步操作,执行顺序晚于普通的同步return逻辑,所以没法直接把结果同步返回给外部使用,需要用Promise封装异步结果后配合.then()或者async/await调用获取返回值,改造方式如下:

1 改造tbotping函数,封装为Promise返回

将整个逻辑包裹在Promise实例中返回,拿到ping结果时调用resolve传出数据,出现异常时调用reject抛出错误:

function tbotping () {
  return new Promise((resolve, reject) => {
    var MikroNode = require('mikronode');
    var device = new MikroNode('IP');

    //device.setDebug(MikroNode.DEBUG);

    device.connect()
    .then(([login])=>login('username','password'))
    .then(function(conn) {
      conn.closeOnDone(true);
      var ping = conn.openChannel();
      ping.closeOnDone(true);
      console.log('Get ping');
      ping.write('/ping',{'address':'77.88.8.8','count':'3'});

      ping.data
      .subscribe(function (data) {
        // 拿到结果后向外传出,可直接传原始data对象,也可传序列化后的JSON字符串
        var myJSON = JSON.stringify(data);
        console.log(myJSON);
        resolve(myJSON);
      }, (subscribeErr) => {
        // ping订阅出错时抛出异常
        reject(subscribeErr)
      });
    })
    .catch(connectErr => {
      // 连接、登录过程出错时抛出异常
      reject(connectErr)
    })
  })
};

2 外部调用获取返回值

有两种常用的调用方式可以拿到返回结果:

  • 方式1:用.then()链式调用
tbotping()
.then(pingResult => {
  // pingResult就是你需要的myJSON,可直接在这个作用域内使用
  console.log('外部获取到的ping结果:', pingResult)
  // 如果需要对字段做操作,可转成JS对象
  const pingData = JSON.parse(pingResult)
  // 示例:取平均延迟、丢包率字段,可根据你实际返回的字段调整
  console.log('平均延迟:', pingData['avg-rtt'], '丢包率:', pingData['packet-loss'])
})
.catch(err => {
  console.error('执行出错:', err)
})
  • 方式2:在async函数内用await调用(写法更简洁)
async function main() {
  try {
    const pingResult = await tbotping()
    const pingData = JSON.parse(pingResult)
    // 此处可直接使用返回的结果
    console.log('发送包数:', pingData['sent'], '接收包数:', pingData['received'])
  } catch (err) {
    console.error('执行出错:', err)
  }
}

// 执行入口函数
main()

内容的提问来源于stack exchange,提问作者imPPLs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:57:03