繁体   English   中英

Nodejs执行功能

[英]Nodejs Executing Functions

我是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. ShowIP()内部, tor_proxy.request()将请求发送到http://ident.me
  2. 在不等待来自http://ident.me的任何答复的情况下,执行Renew()函数。
  3. tor_proxy.renewTorSession()可能是异步函数。 如果是这样,则在开始之后,将执行下一个ShowIP()而无需等待renewTorSession()完成。

根据http://ident.me答复的速度renewTorSession()完成的速度,结果可能会有所不同。

要按正确的顺序执行这些功能,可以搜索以下关键字:

一个使用promiseasyncawait的示例:

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM