在Node.js中关闭

时间:2016-09-11 12:02:22

标签: javascript node.js closures

我使用的是嵌套for循环但是虽然我没有得到必需的结果,但我转到了闭包

这是我之前代码的骨架

Error to NSError

这里是我在使用闭包时遇到错误的代码

// First for loop
for(data)
{
    connection.query(records as per data)
    if(!error)
    {   
        // Second for loop
        for(abc)
        {
            if(condition)
            {
                condition1.....
                    result=call method1
                condition2.......
                    result=call method2
                conditionN....
            }
            else
            {
            }

            //After completion second for loop push result into array
            resultArray.push(result)

            // After completion on both for loop callback array         
            if(EOD first for && EOD second for)
            {
                callback(resultArray)
            }
        }
    }
}

输出 -

function secondFunction(data)
{
    console.log("secondFunction"+data)

    var result = [];
    for (var i = 0; i < data.length; i++) {

        result.push( function() {
            console.log(data[i].type)
        } );
    }
    return result;
}

function firstFunction() 
{
    for (var j = 0; j < r.abc.length; j++) {

         connection.query(" my sql query on r.abc[j].etc ", function(err, rows){

            if (!err)
            {   
               console.log("length"+rows.length)

               var fnlist = secondFunction(rows);
               fnlist[j]();

               console.log("first for")    
            }
            else
            {
                console.log('Error in performing query')
            }
        });
    }
}

firstFunction()

我已按照this

的示例5进行操作

具体而言, 这是在nodejs中使用闭包的正确方法吗? 我们可以在connection.query()中使用它吗?如果是,那么我们怎样才能实现这一目标呢?

1 个答案:

答案 0 :(得分:-1)

您正在“for”指令中访问数组的无效位置...尝试:

for(var i = 0; i&lt; data.length -1; i ++){

=]