无法从内回调访问外回调的变量

  • 本文关键字:回调 变量 访问 node.js
  • 更新时间 :
  • 英文 :


在我的Discord bot中,我有一些看起来像这样的代码(省略了该问题的部分):

run(message) {
    [...]
    mongoClient.connect(config.mongodb.url, function(err, db) {
        [...]
        var roleMessage = ````Roles on ${message.guild.name} (use !role:add <role> to assign them):`
        var isNotificationsEnabled = false
        db.collection('roles').find({"sid": message.guild.id}).each(function (err, doc) {
            [...]
            if(doc) {
                if(doc.rolename != '$notify') {
                    roleMessage += `${doc.rolename}n`
                } else {
                    isNotificationsEnabled = true
                }
            } else {
                [...]
            }
        })
        [...]
    })
}

我的问题是,来自mongoClient.connect()回调的变量是从内置回调中无法访问的(特别是roleMessageisNotificationsEnabled) - 我正在尝试从MongoDB数据库中的数据库元素中构建一个字符串。有什么办法可以使这些变量可以访问,或者有更好的做事方式?

预先感谢任何可以提供帮助的人。

javascript没有错,您可以看到下面的示例与范围访问变量有关,

let message = { some: 'thing' }
let items = [ 'item1', 'item2' ]
let something = message => {
     let newvar = 'scope1';
      items.forEach(function(item) {
        items.forEach(function(item2) {
        console.log(item2 + ' ' + item + ' ' + newvar + ' ' + message.some)
        })
      })
}
something(message)

db.collection('roles')。查找({" sid":message.guild.id})。每个(function(erry,doc){

可能不会从集合中返回任何数据。

最新更新