Javascript 匿名函数中JS变量的作用域是什么
为什么这段代码返回$products为空?如果我在函数中测试$products,它会显示数据。。。但一旦它完成,我似乎无法获得数据Javascript 匿名函数中JS变量的作用域是什么,javascript,node.js,Javascript,Node.js,为什么这段代码返回$products为空?如果我在函数中测试$products,它会显示数据。。。但一旦它完成,我似乎无法获得数据 var $products = new Array(); connection.query($sql, function(err, rows, fields) { if (err) throw err; for(i=0; i< rows.length; i++) { $products[rows[i].source_id
var $products = new Array();
connection.query($sql, function(err, rows, fields) {
if (err) throw err;
for(i=0; i< rows.length; i++)
{
$products[rows[i].source_identifier] = "xyz";
}
});
connection.end();
console.log($products); // Shows empty.
var$products=new Array();
query($sql,函数(err,行,字段){
如果(错误)抛出错误;
对于(i=0;i
它不会返回空值;没有return
语句。问题是操作是异步的。运行console.log()
调用时,查询尚未完成
将console.log()
调用移动到该回调函数内部,在for
循环之后。(同时用var
声明“i”!!)
使用包含回调的API的全部意义在于处理操作是异步的这一事实。如果它们是同步的,那么设计这样一个接口就太奇怪了。欢迎来到异步的奇妙世界!你不能那样做。我的第一反应是这是一个异步问题。。。。我试着回电话,但我得到了奇怪的数据。。你能举个简单的例子吗?谢谢。@smorhaim添加一个
返回
没有任何作用,因为它只是将它返回给在对连接的调用中建立的异步上下文中调用的回调。query
。简而言之,您不能在回调之外访问填充的$products
。@smorhaim,对连接.query的调用几乎立即返回。您只留下一个回调函数在结果到达时运行。