gpt4 book ai didi

javascript - 在node.js中正确使用这个内部回调函数

转载 作者:行者123 更新时间:2023-12-03 12:13:26 24 4
gpt4 key购买 nike

运行“构造函数”脚本时,我在访问此类中的变量时遇到错误。有什么想法吗?

/**
* Info
*/
exports.sqlWhiteList = function(){

var sqlImport = require('../DBConnectors/MYSQLConn.js');
var sql = new sqlImport.sqlConn();

//fill up static variables
this.tables = {};
this.attributes = {};

//populate the table names
sql.performQuery(('xxxxxx xxxxx = \'BASE TABLE\' ' +
'AND TABLE_SCHEMA=\'' + sql.credentials.database + '\''),function(rows){

for (var index in rows){
this.tables[rows[index]['TABLE_NAME']] = true; // this fails
}
});
};

错误 =“TypeError:无法读取未定义的属性‘表’”

最佳答案

您只需将 this 隐藏在外部函数中,以便回调可以获得正确的值:

var moduleObj = this;

// ...

//populate the table names
sql.performQuery(('xxxxxx xxxxx = \'BASE TABLE\' ' +
'AND TABLE_SCHEMA=\'' + sql.credentials.database + '\''),function(rows){

for (var index in rows){
moduleObj.tables[rows[index]['TABLE_NAME']] = true; // this fails
}
});

此外,我强烈建议不要使用 for ... in 循环来迭代从查询返回的行。我不熟悉该 API,但我愿意打赌它是一个真正的 JavaScript 数组。您应该使用带有索引变量的普通 for 循环,或者使用 .forEach() 调用。对数组使用 for ... in 是一种不好的做法,原因有几个,其中最重要的是它会导致 V8(也许还有其他运行时)放弃任何认真优化的尝试在某些情况下,函数的代码。显然,其中一种情况是当您在数组上使用它时。

关于javascript - 在node.js中正确使用这个内部回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24844682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com