Node.js Nodejs执行函数
我是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
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我明白了,这是一篇很有帮助的帖子,我会试试看我是否能利用它。你是一个传奇!非常感谢,我确实提出了一个类似的解决方案使用承诺,这看起来真的很好!非常感谢。你是一个传奇人物!非常感谢,我确实提出了一个类似的解决方案使用承诺,这看起来真的很好!非常感谢。