【问题标题】:Update variable value outside a foreach with mysql and node.js使用 mysql 和 node.js 在 foreach 之外更新变量值
【发布时间】:2017-01-20 23:54:24
【问题描述】:

我在理解 node.js 中的异步回调时遇到了问题

这是我的代码:

//userRole is a session value

//capabilities is an array of strings

var check = 0;

capabilities.forEach((index)=> {

connection.query("SELECT * FROM doc_users_role WHERE name = ?

AND " + index     + "= 1 ",[userRole], function(err, rows){

if(rows.length == 1){

check++;}

});
})
console.log(check) //returns always 0;

如何以异步方式解决此问题?我需要从位于 foreach 中的回调(connection.query 之一)中更新变量检查...谢谢!

【问题讨论】:

  • 看起来您正在异步执行此操作。您作为最后一个参数传递的函数是回调。

标签: mysql node.js asynchronous


【解决方案1】:

这可以使用如下所示的 async 模块来实现。由于 nodejs 的非阻塞性质,除非另有说明,否则它将继续执行而无需等待循环完成。这就是回调的来源。forEachSeries 循环的每次迭代都将执行,然后执行回调以告诉循环它已准备好进行下一次迭代。这样每次迭代都会依次完成。然后将控制台日志放置在最后一个块中,这是将在 forEachSeries 完成时执行的代码片段,因此可以确保显示变量的正确值。我希望这能回答你的问题。

        async.forEachSeries(capabilities, function (index, forEachCallback){ 

            connection.query("SELECT * FROM doc_users_role WHERE name = ?

            AND " + index     + "= 1 ",[userRole], function(err, rows){

                if(rows.length == 1){
                    check++;
                    forEachCallback();
                }
                else{
                    forEachCallback();
                }

            });

        }, function(err) {
            if ( err ){
                // catch error and do something
                return;
            }
            console.log( check );
        }); 

【讨论】:

  • 这很棒。现在我有最后一个问题。 “功能”是我在到达某些特定路线时调用的“角色”类的方法。事实是我需要将整个功能方法返回为真,这样当我对路由节点发出获取请求时,首先检查“roles.capabilities”是否为真,如果为真,它会发送一些响应... 请你帮助我好吗?因为当var“check”等于capabilities.length时,我无法返回整个函数“true”......非常感谢
  • 如果我正确理解您的问题,那么您应该替换 console.log(check);使用 if 语句检查 check 是否等于 roles.capabilites.length ,如果是,则设置 roles.capabilities 等于 true,就像 roles.capabilities = true 一样,希望这有助于解决您的问题,如果我上面的回答解决了您最初的问题请标记为正确,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
相关资源
最近更新 更多