javascript - for 循环中的变量始终返回 0

标签 javascript node.js for-loop sails.js

我是 node.js/sails.js 的新手,遇到了一个问题,我知道答案很简单,但我似乎无法解决。

我的代码如下

SendCompleted : function(req,res)
    {
        var updated = 0;
        var params = req.params.all();
        var dt = JSON.parse(decodeURI(params.id));
        var connection = new sql.Connection(testrmis, function (err)
        {
            if (err) {

            }
            for(var i = 0; i < dt.length; i++) {
                var obj = dt[i];
                var request = new sql.Request(connection);
                request.stream = true;
                request.input('branchid', sql.Int(), obj.branch_id);
                request.input('picklistid', sql.Int(), obj.picklist_id);
                request.input('scanned',sql.Int(),obj.scanned);
                request.input('expected', sql.Int(),obj.expected);
                request.input('poscode', sql.VarChar(),obj.poscode);
                request.input('label', sql.VarChar(), obj.label);
                request.input('dt', sql.VarChar(), obj.dt);
                request.execute('WAREHOUSE_InsertPiPackData');
                request.on('done', function(returnValue) {
                    updated = updated + returnValue;
                    console.log(updated);
                });
            }
            res.send("[{\"ReturnValue\":" + updated + "}]");
        });

    }

我发送了 4 行结果,我的 console.log(updated) 对每一行进行了计数,例如 1,2,3,4

但是更新的res.send结果总是0。

谁能解释一下为什么会这样?我的 var updated 在我的循环之外并且它正在正确更新,但是当循环完成时它似乎重置为 0?

returnValue == 来自存储过程的@@rowcount

最佳答案

requestasync 所以

res.send("[{\"ReturnValue\":" + updated + "}]");

甚至在您根据请求获得回调之前就已执行,因为 JS 不等待回调并执行下一行。您可以做的是使用 counter 并将 res.send 放在 for 循环中。

SendCompleted : function(req,res)
    {
        var updated = 0;
        var params = req.params.all();
        var dt = JSON.parse(decodeURI(params.id));
        var connection = new sql.Connection(testrmis, function (err)
        {
            if (err) {

            }
            var count = dt.length;
            for(var i = 0; i < dt.length; i++) {
                var obj = dt[i];
                var request = new sql.Request(connection);
                request.stream = true;
                request.input('branchid', sql.Int(), obj.branch_id);
                request.input('picklistid', sql.Int(), obj.picklist_id);
                request.input('scanned',sql.Int(),obj.scanned);
                request.input('expected', sql.Int(),obj.expected);
                request.input('poscode', sql.VarChar(),obj.poscode);
                request.input('label', sql.VarChar(), obj.label);
                request.input('dt', sql.VarChar(), obj.dt);
                request.execute('WAREHOUSE_InsertPiPackData');
                request.on('done', function(returnValue) {
                    count--;
                    updated = updated + returnValue;
                    console.log(updated);
                    if(count == 0) res.send("[{\"ReturnValue\":" + updated + "}]");
                });
            }
        });

    }

关于javascript - for 循环中的变量始终返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30664504/

相关文章:

php - 单选按钮名称属性可以有数值吗

javascript - split() 循环 : if string number = x, 插入 <br>

javascript - 如何使用Vanilla JavaScript自动播放下一首歌

javascript - 更改数组javascript中 'key'的字符串

node.js - 在 AngularJS 中使用 $resource 删除发布的内容

javascript - 如何: wsse soap request in javascript (node)

javascript - 我如何保证在我的应用程序中一次性使用 gulp?

c++ - 交替排序数组的最简单方法是什么(例如 :T, T,F,F,F,T,F,T,F,F,F 到 T,F,T,F,T,F,T,F,T,T ,T)?

javascript - Electron 加载远程 URL 并执行 javascript

Javascript – 创建 "some"函数