为什么我未定义为此代码的答案?

时间:2017-08-06 18:17:04

标签: javascript node.js

这是提供域名的详细信息的代码

var whois = require('node-whois')

function Info() {

}
Info.prototype.dom =function () {
    whois.lookup('google.com', function (err, data) {

        })
    }
var k = new Info();

console.log(k.dom());

2 个答案:

答案 0 :(得分:1)

这不是你的问题。

相反,问题是你没有处理JavaScript的非阻塞性质。当你调用k.dom()并返回时,对lookup的调用已经开始,但还没有完成。呼叫不等待(“阻止”)答案。相反,当答案最终到来时,您作为查询的第二个参数传递的函数将使用结果调用。不幸的是,在那个函数中,你什么都不做,所以返回的结果就丢失了。

尝试在打印出数据的函数内部放置一些内容,看看会发生什么。然后考虑如何构建代码来处理这个问题。

答案 1 :(得分:0)

您的script.js(模块)

var whois = require('node-whois');

function Info() {

}
Info.prototype.dom = function (callback) {
    whois.lookup('google.com', function (err, data) {
        callback(err,data);
    });
}

module.exports = Info;

使用你的脚本;不要在定义模块的同一文件中使用它们显示不良做法。

var script = require('./script');
var k = new script();

k.dom(function(e,d){
    console.log(d);
});
相关问题