将值分配给JavaScript类属性时出错

时间:2015-03-06 22:31:24

标签: javascript node.js asynchronous synchronization prompt

我在javascript类中设置类属性时遇到错误。我正在使用nodejs提示模块来获取用户输入并将其设置为class属性。但我得到了以下错误。

TypeError:无法读取属性' resultAge'未定义的

我认为它与同步有关,但我无法弄清楚如何在这种情况下实现它。

此外,我想再次提示用户,直到他输入有效数字(我不能使用do while循环,可能是什么解决方案?)

var prompt = require("prompt");

var ageTotal =  function(){
    this.resultAge = 0;

    this.getUserAge = function(){
        prompt.start();

        //i want to run this until valid input is entered
        prompt.get(["age"], function(err, result){

            //I know i have to convert userInput to int but thats for later
            this.resultAge += result.age

        });
    }
}

ageTotal.prototype.displayTotalAge = function(){
    return this.resultAge;
}

var a = new ageTotal();
a.getUserAge();


   var age = a.displayTotalAge();
console.log(age);   //This is running before the above function finishes

编辑: 问题设置resultAge已解决,但现在问题是 var age = a.displayTotalAge(); 在console.log(age)之后评估,导致 0 ;

1 个答案:

答案 0 :(得分:1)

您需要将ageTotal的范围传递到prompt.get回调:

var ageTotal =  function(){
    this.resultAge = 0;

    this.getUserAge = function(){
        var that = this;
        prompt.start();

        prompt.get(["age"], function(err, result){
            that.resultAge += result.age
        });
    }
}