Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Nodejs执行函数_Node.js_Function_Asynchronous - Fatal编程技术网

Node.js Nodejs执行函数

Node.js Nodejs执行函数,node.js,function,asynchronous,Node.js,Function,Asynchronous,我是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://id

我是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是事件驱动的(如果我错了,请纠正我),任何帮助都将不胜感激。谢谢:)

脚本将按如下方式执行:

  • ShowIP()
    内部,
    tor\u proxy.request()
    向发送请求
  • 在不等待任何答复的情况下,执行函数
    Renew()
  • tor\u proxy.renewTorSession()
    可能是一个异步函数。如果是这样,则在开始后,将执行下一个
    ShowIP()
    ,而无需等待
    续订会话()
    完成
  • 根据回复速度和续订会话()完成速度的不同,结果可能会有所不同

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

    • 承诺
    • 异步
      /
      等待
    • 来自Node.js
    • 图书馆喜欢
    使用
    promise
    async
    wait
    的示例:

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

    脚本将按如下方式执行:

  • ShowIP()
    内部,
    tor\u proxy.request()
    向发送请求
  • 在不等待任何答复的情况下,执行函数
    Renew()
  • tor\u proxy.renewTorSession()
    可能是一个异步函数。如果是这样,则在开始后,将执行下一个
    ShowIP()
    ,而无需等待
    续订会话()
    完成
  • 根据回复速度和续订会话()完成速度的不同,结果可能会有所不同

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

    • 承诺
    • 异步
      /
      等待
    • 来自Node.js
    • 图书馆喜欢
    使用
    promise
    async
    wait
    的示例:

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

    这是节点的预期异步行为。看看上面的答案。这应该会让您朝着正确的方向开始。@Narm我明白了,这是一篇很有帮助的帖子,我将试着看看是否可以利用它,这是Node预期的异步行为。看看上面的答案。这会让你朝着正确的方向开始。@Narm我明白了,这是一篇很有帮助的帖子,我会试试看我是否能利用它。你是一个传奇!非常感谢,我确实提出了一个类似的解决方案使用承诺,这看起来真的很好!非常感谢。你是一个传奇人物!非常感谢,我确实提出了一个类似的解决方案使用承诺,这看起来真的很好!非常感谢。