函数调用在有机会设置重要数据之前被传递

时间:2013-04-15 17:42:43

标签: javascript node.js callback request

所以我在node.js中有这个函数,通过从https://icanhazip.com/(方便的网站,检查出来)获取外部IP来获取外部IP,但是当调用请求时,不允许在{ {1}}被调用。这是代码:

return

所以我想,这里的问题是:如何在返回值之前让这个脚本等待回调函数完成?

2 个答案:

答案 0 :(得分:1)

查看async serieshere,此处示例

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