Nodejs исполняющие функции - PullRequest
0 голосов
/ 21 ноября 2018

Я новичок в Nodejs, и мне было интересно, почему функции выполняются не по порядку, а не так, как я написал:

var tor_proxy = require("tor-request")
var s = require("sleep");

tor_proxy.setTorAddress("localhost", 9050);
tor_proxy.TorControlPort.password = "password";

function ShowIP() {
    tor_proxy.request("http://ident.me", function(err, response, body) {
        if(!err && response.statusCode == 200) {
              console.log(body);
        }
    });
}

function Renew() {
    tor_proxy.renewTorSession(function() { console.log("renewed"); });
}


ShowIP();
Renew();
ShowIP();

//Id Like It To Show The IP Then Renew Then Show The New IP
//But Instead It's Out Of Order

Nodejs управляется событиями (поправьте меня, если я ошибаюсь), и любая помощь будет оценена,Спасибо:)

1 Ответ

0 голосов
/ 21 ноября 2018

Сценарий будет выполнен так:

  1. Внутри ShowIP(), tor_proxy.request() отправляет запрос на http://ident.me.
  2. Без ожидания ответас http://ident.me, выполняется функция Renew().
  3. tor_proxy.renewTorSession() может быть асинхронной функцией.Если это так, то после того, как он начнется, следующий ShowIP() будет выполнен без ожидания завершения renewTorSession().

В зависимости от того, как быстро http://ident.me отвечает и как быстро renewTorSession()В итоге результаты могут отличаться.

Чтобы выполнить эти функции в правильном порядке, вы можете выполнить поиск по следующим ключевым словам:

Пример использования promise, async и await:

var tor_proxy = require('tor-request');
tor_proxy.setTorAddress('localhost', 9050);
tor_proxy.TorControlPort.password = 'password';

function ShowIP() {
  return new Promise((resolve, reject) => {
    tor_proxy.request('http://ident.me', function (err, response, body) {
      if (err) reject(err);
      else if (response.statusCode !== 200) reject('response.statusCode: ' + response.statusCode);
      else {
        console.log(body);
        resolve();
      }
    });
  });
}

function Renew() {
  return new Promise((resolve, reject) => {
    tor_proxy.renewTorSession(() => {
      console.log('renewed');
      resolve();
    });
  });
}

async function testFunction() {
  // Await makes sure the returned promise completes before proceeding.
  // Note that await keyword can only be used inside async function.
  try {
    await ShowIP();
    await Renew();
    await ShowIP();
    console.log('done!');
  } catch (error) {
    console.log(error);
  }
}

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