所以我在node.js中有这个函数,通过从https://icanhazip.com/
(方便的网站,检查出来)获取外部IP来获取外部IP,但是当调用请求时,不允许在{ {1}}被调用。这是代码:
return
所以我想,这里的问题是:如何在返回值之前让这个脚本等待回调函数完成?
答案 0 :(得分:1)
查看async series
库here,此处示例
async.series([
function(callback){
// do some stuff ...
callback(null, 'one');
},
function(callback){
// do some more stuff ...
callback(null, 'two');
}
],
// optional callback
function(err, results){
// results is now equal to ['one', 'two']
});
// an example using an object instead of an array
async.series({
one: function(callback){
setTimeout(function(){
callback(null, 1);
}, 200);
},
two: function(callback){
setTimeout(function(){
callback(null, 2);
}, 100);
}
},
function(err, results) {
// results is now equal to: {one: 1, two: 2}
});
另外,请看一下这个问题Idiomatic way to wait for multiple callbacks in Node.js
答案 1 :(得分:1)
这是因为Node中I / O请求的异步性质:函数get_ext_ip
在请求完成之前返回。
处理此问题的方法之一是传递一个回调函数,该函数将在请求完成时被调用:
var request = require('request');
var get_ext_ip = function(callback) {
request('https://icanhazip.com', function(error, response, body) {
callback(error, body);
});
}
get_ext_ip(function(err, ip) {
if (err)
console.log('an error occurred:', error);
else
console.log(ip);
});