为什么此代码会将$ 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_identifier] = "xyz";
}
});
connection.end();
console.log($products); // Shows empty.
答案 0 :(得分:2)
它不会返回它为空;没有return
声明。问题是该操作是异步。当您的console.log()
调用运行时,查询尚未完成。
在console.log()
循环之后,将您的for
调用移至内的回调函数。 (同时用var
声明“i”!!!)
使用涉及回调的API的全部意义在于应对操作是异步的这一事实。如果它们是同步的,那么设计这样的接口会很奇怪。