nodejs функция не устанавливает переменную, net -ping - PullRequest
0 голосов
/ 30 марта 2020

Пытаясь установить переменную на основе результата запуска session.pingHost, функция pingHost работает, но она не устанавливает мою переменную так, как я ожидал.

import ping from 'net-ping';

let TEMPIP = '8.8.8.8';
let session = ping.createSession();
let ipset = false;

session.pingHost(TEMPIP, function(error) {
  if (error) {
    console.log('Offline');
    ipset = false;
  } else {
    console.log('Alive');
    ipset = true;
  }
});

console.log(ipset);

результат:

false
"Alive"

Ожидаемый результат:

"Alive"
true

Добавление кода, как я получил его на работу

function pingfunction(TEMPIP) {
  return new Promise(function(resolve, reject) {
    session.pingHost(TEMPIP, function(error) {
      if (error) {
        console.log('Offline');
        reject(false);
      } else {
        console.log('Alive');
        resolve(true);
      }
    });
  });
}
pingfunction(TEMPIP)
  .then(function(result) {
    console.log(result);
  })
  .catch(function(err) {
    console.log(err);
  });

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Причина, по которой для ipset установлено значение false, заключается в том, что вызов console.log вызывается перед обратным вызовом для session.pingHost. Вам нужно переместить вызов в console.log внутри функции обратного вызова для `session.pingHost 'следующим образом:

import ping from 'net-ping';

let TEMPIP = '8.8.8.8';
let session = ping.createSession();
let ipset = false;

session.pingHost(TEMPIP, function(error) {
  console.log("CALLED")

  if (error) {
    console.log('Offline');
    ipset = false;
  } else {
    console.log('Alive');
    ipset = true;
  }
  console.log(ipset);
});
0 голосов
/ 30 марта 2020

Вы должны использовать = вместо ==.
== для сравнения, тогда как = для присвоения значения переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...