繁体   English   中英

node.js循环和数据库查询问题

[英]Issue with node.js loop and db queries

我必须在Node.js中循环运行mysql查询,但是我所知道的无法以我想要的方式完成。
这是我要实现的目标:

for(var attributename in body){
   sql.increaseValue(attributename, body[attributename]);
}

我去解析和JSON对象,在其中我没有属性的编号或名称,也没有其值。 我知道我需要使用某种回调模式。 我已经读过很多关于此的文章,但在这种情况下,我无法继续
提前致谢
拉德克

我假设您想知道所有这些操作何时结束? 循环何时结束? 这可以通过多种方式来实现。 我假设您的.increaseValue方法接受完成回调。 如果是这样,那么这里是一个伪代码:

var finalize = function( ) {
    // for finalization after the loop
};

var requests = [];
for (var attributename in body) {
    (function(attr){
        var req = function() {
            sql.increaseValue( attr, body[ attr ], function( ) {
                var idx = requests.indexOf( req );
                if (idx !== -1) {
                    requests.splice( idx, 1 );
                }
                if (!requests.length) {
                    finalize( );
                }
            } );
        }
        requests.push( req );
    })(attributename);
}

// second loop
for (var i = 0; i < requests.length; i++) {
    requests[i]( );
}

几件事值得注意:

1)如果.increaseValue是异步的,那么您可以利用.increaseValue是单线程的事实,并且可以摆脱第二个循环,而在requests.push( req );之后简单地调用req( ) requests.push( req ); 但是,如果任何时候.increaseValue同步触发(例如,当发生错误或某些错误时),则可能会导致finalize立即触发。 因此,请谨慎操作。

2)由于作用域,您需要使用匿名函数包装req定义。

3)看一下caolan的Async.js库 它可能会大大帮助您解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM