node.js - 无法从内部回调访问外部回调的变量

时间:2017-09-10 01:21:29

标签: node.js

在我的不和谐机器人中,我有一些看起来像这样的代码(省略了问题的部分):

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数据库中的数据库元素。有什么办法可以让这些变量可以访问,还是有更好的办法?

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

1 个答案:

答案 0 :(得分:0)

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')。find({“sid”:message.guild.id})。each(function(err,doc){

可能无法从集合中返回任何数据。