正确使用异步方法避免每个方法引用错误

时间:2017-06-07 18:03:19

标签: node.js asynchronous

我正在进行一系列数据库调用,并希望在完成所有操作后返回一些内容。

我正在使用异步模块来帮助解决这个问题并将一个函数应用于数组中的每个元素。

    async.each(items, sqlCall(), 
    function(err) {
        if( err ) {
          // All processing will now stop.
          console.log('A call failed');
        } else {
            console.log("finished async operations");
        }
    });

我将sqlCall定义如下

sqlCall = function(item , callback){
        console.log("arr is " + JSON.stringify(item));
        lampInfo = item[0];
        userRoom = item[1];
        sql = item[2];
        console.log('sql is ' + sql);
        connection.query(sql, function(error, results, fields) {
            if (error){
                console.log("why error");
                callback(error);
            }
            else {
                console.log("successful call");
                lampSavingsStatement[savingsCalc(lampInfo, results[0], energyPrice)] = userRoom;
                callback();
            }
        });
    } 

lampSavingsStatement是一个全局字典,savingsCalc是另一种方法

我一直收到引用错误,其中arr未定义,并且不确定问题是什么。

有关项目

的示例
[ [ { lampName: '2ft T5 14W', number: '12', hours: '3' },
    'room2',
    'SELECT * FROM `lightstoled` WHERE `techid` = \'2ft T5 14W\'' ] ]

1 个答案:

答案 0 :(得分:1)

您将async.each的结果传递给sqlCall(),而不是函数。

请改为尝试:

async.each(items, sqlCall, function (err) { ... });