Javascript 从事件发射器设置实例变量

Javascript 从事件发射器设置实例变量,javascript,node.js,Javascript,Node.js,因此,当我调用下面的代码时,name的输出值始终是默认值“testname”。 应该是"新价值", // Constructor function test(connection) { this.name = 'testname'; } test.prototype.exec = function () { var Request = require('tedious').Request // this could be any event emitter; re

因此,当我调用下面的代码时,name的输出值始终是默认值“testname”。 应该是"新价值",

// Constructor
function test(connection) {
    this.name = 'testname';

}

test.prototype.exec = function () {


    var Request = require('tedious').Request // this could be any event emitter;
    request = new Request("select id, name from somevals where id = 1", function (err, rowCount) {
        if (err) {
            console.log(err);
        } else {
            console.log(rowCount + ' rows');
        }
    });


    this.connection.execSql(request);

    request.on('row', function (columns) {
        this.name = 'newvalue'; //how do i  set the instance variable name so that it is visible to the calling module 
    });

};
// export the class
module.exports = test;
打电话看起来像

var test = require("./Model/test");
        var b = new test(connection);
        b.exec();

    console.log(b.name);

exec接受回调

// Constructor
function test() {
    this.name = "testname";

}

test.prototype.exec = function (callback) {


    var Request = require('tedious').Request // this could be any event emitter;
    request = new Request("select id, name from somevals where id = 1", function (err, rowCount) {
        if (err) {
            console.log(err);
        } else {
            console.log(rowCount + ' rows');
        }
    });


    this.connection.execSql(request);

    request.on('row', function (columns) {
        callback(columns[1]); //how do i  set the instance variable name so that it is visible to the calling module 
    });

};
// export the class
module.exports = test;
回调的定义和测试调用如下

function callback(name) {
    console.log(name);
}

    function executeStatement() {

    var beatle = require("./Model/test");
        var b = new test(connection);
        b.exec(callback);

    console.log(b.name);

    }

你知道异步性之类的东西,对吧?它似乎不是:)我应该如何让调用模块等待直到值被设置好?请看--想象一下这个问题的
foo
是你的
exec
。它需要将回调函数作为参数,并在任务完成时调用该函数