2014-06-17 165 views
1

我在这里尝试的所有方法都是访问函数外部的局部变量'htmlrows',但对node.js来说似乎并不那么容易。如何从node.js中的函数外部访问局部变量

var htmlrows; 
query.on('row', function(row) {  
    console.log("%s |%s |%d", row.empid,row.name,row.age); 
    htmlrows += "<tr><td>" + row.empid + "</td><td>" +row.name + "</td><td>" +row.age + "</td></tr>"; 

}); 

console.log("htmlrows outside function"); 
console.log(htmlrows); // console log prints 'undefined'. 

请你让我知道如何访问函数外部的'htmlrows'吗?

感谢很多提前

+0

为什么不应用函数内的逻辑,返回结果? –

+0

感谢Ben的快速反应。正如你所说的那样,这是一种可能性,但我想访问的是函数之外的内容。对于我的学习,如果我真的想访问外部函数,我该怎么做呢? – user3747813

+0

假设在EventEmitter实例中有一个'end'事件,它是'query'(这是典型的):'query.on('row',function(row){... htmlrows + =“... “;})。on('end',function(){console.log(htmlrows);});' – zamnuts

回答

2

你的问题是node.js的是异步的,所以console.log(htmlrows);正在查询功能完成之前执行。

您需要做的是有一个单独的函数,用于侦听来自查询函数的回调。

你可以尝试使用Node.js的异步中间件,这将让你在一系列链异步调用,使他们获得在一定的顺序执行:

var some_data = null; 
async.series([ 
    function(callback) { 
     //...do a thing 
     function_1(callback); 
    }, 
    function(callback) { 
     //...do another thing 
     function_2(callback); 
    } 
    //...etc 
]); 

function function_1(callback) { 
    some_data = 'value'; 
    console.log('function_1!'); 
    return callback(); 
} 

function function_2(callback) { 
    console.log('function_2: '+some_data); 
    return callback(); 
} 

将导致:

#:~ function_1! 
#:~ function_2: value 
+0

谢谢。请试试这个方法。 – user3747813

相关问题