我是JavaScript和NodeJS的新手,我需要快速解决这个问题。
connection(getSQL2)
.then((table)=> {
table.forEach(row=> {
let obj = {
countryid: row.IdPais,
country: row.NombrePais
};
data.push(obj);
});
});
console.log(obj);
当我尝试使用console.log显示对象时,我得到了undefined,这看起来非常明显。但是,让它显示上面创建的Object'obj'是一种简单的方法吗?
更新:为了澄清,此处仅使用console.log作为示例。我需要从外部访问该功能,但我可以。
提前致谢!
答案 0 :(得分:0)
这里发生了两件事。
1)你正在使用一个承诺和承诺异步解决。好的经验法则是任何以.then(...)
结尾的代码都是一个承诺。这意味着它下面的代码可以在promise完成之前执行,如果它在promise完成解析之前读取这些值,它们将被读作undefined
。
2)您使用let
关键字来定义您的变量,这意味着它只会在范围内定义:
row => {
let obj = {
countryid: row.IdPais,
country: row.NombrePais
};
data.push(obj);
// Show the object where it is defined
console.log(obj);
}
答案 1 :(得分:0)
你需要这样做: -
async database()
{
try {
const table= await connection(getSQL2);
if (table!== null)
{
table.forEach(row=> {
let obj = {
countryid: row.IdPais,
country: row.NombrePais
};
console.log('This will resolve the promise',obj);
}
else
{
//anything needed
}
}
catch (error)
{
// Error retrieving data
}
}
async
和await
是并行使用的关键字。在获取数据之前,await
关键字不允许控件关闭。
答案 2 :(得分:0)
您可以创建global variable
,并将该值分配给该函数内的该变量。
然后,您还可以在函数外部访问变量obj
。
var temp;//declare a global variable here.
connection(getSQL2)
.then((table)=> {
table.forEach(row=> {
let obj = {
countryid: row.IdPais,
country: row.NombrePais
};
data.push(obj);
temp = obj;//assign value to global variable here
});
});
console.log(temp);//you can access the 'obj' using temp
希望这会对你有所帮助。