javascript中,如何从外部获取内部匿名函数返回的值?

const dns=require('dns')
const dnslookup=(address)=>{
        var a;
        dns.resolve4(
                address,
                (err,addresses)=>{a=addresses}
        )
        return a
}
console.log(dnslookup('google.com'))

我想在调用dnslookup函数后得到addresses数组的值,传递给变量a。为何得到的结果总是undefined?

javascript@linux:~/test$ node dnslookup.js 
undefined
阅读 3.7k
3 个回答

因为dns.reolve4是个异步方法,return a的时候,它的callback还没有被执行,所以a还没有被赋值

const dns = require('dns');
const dnslookup = (address)=>{
    return new Promise((resolve, reject)=>{
        dns.resolve4(
            address,
            (err,addresses)=>{
                if(err){
                    return reject(err);
                }
                resolve(addresses);
            }
        )
    });
}
dnslookup('google.com').then(function(result){
    console.log(result);
});

定义一个回调函数进行返回值调用

const dnslookup=(address)=>{
        var a;
        dns.resolve4(
                address,
                (err,addresses)=>{
                        a=addresses;
                        foo(a);
                        }
        )
       
}
function foo(a){return a;}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题