gpt4 book ai didi

javascript - 优雅地将变量传递给异步回调

转载 作者:行者123 更新时间:2023-11-30 22:58:19 24 4
gpt4 key购买 nike

我正在编写一段代码来从 DB 构建模式,并基于 SE 上的其他示例,我想出了这种方法来将表名一直传递到我将处理表字段的代码(我当时需要访问表名)。该模式来自使用 jugglingdb-mysql 的 MySQL。

这是我能做的最“优雅”的事情吗(我不希望像现在这样在代码中使用闭包)?

schema.client.query('SHOW TABLES', function(err, data) {
if (err) throw err;
data.forEach(function(table) {
// closure to pass down table name
(function(_table) {
schema.client.query('SHOW columns FROM ' + _table, function(err, rows) {
if (err) throw err;
// closure to pass down table name
(function(_table) {
rows.forEach(function(row){
// Go wild processing fields
})
})(_table);
});
})(table['Tables_in_db'])
});
});

最佳答案

内部函数继承外部函数的变量。在这种情况下,您不需要那么麻烦地传递变量,以下内容就足够了:

data.forEach(function(table) {
var _table = table['Tables_in_db'];
schema.client.query('SHOW columns FROM ' + _table, function(err, rows) {
if (err) throw err;
rows.forEach(function(row){
// Go wild processing fields
})
});
});

您唯一需要对立即调用的函数执行此操作的时间是在创建 callbacks inside for-loops 时.由于 Javascript 作用域是基于函数而不是基于 block 的,for 循环不会引入新的作用域,迭代变量最终会被所有回调共享(它最终会指向最后一个元素)。

关于javascript - 优雅地将变量传递给异步回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25230095/

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