Node.js - 从母查询获取数据到嵌套查询

时间:2017-07-16 13:32:21

标签: javascript mysql node.js

    connection.query('select * from `test` WHERE `deny`=false',function(err,rows,fields){

for (var i=0; i<rows.length; i++){
    if (rows[i].enddate == mydate)
    {
            msg = "message";
            connection.query('select * from `cash` WHERE `id`=test',function(err2,rows2,fields2){
            if (rows2[0].cash >= 30)
            {
                connection.query('UPDATE `cash` SET `cash`='+ rows2[0].cash-30 +' WHERE `id`=test',function(err3,rows3,fields3){
                msgsend(rows[i].contact,msg);
                });
            }
            });
    }


}
});

这是我的代码。 但是,当我运行我的代码 它显示如下错误: TypeError:无法读取未定义的属性“0”

请帮忙 我的代码出了什么问题?

2 个答案:

答案 0 :(得分:0)

首先尝试使用

进行调试

console.log(rows)console.log(rows2)可能是其中一个是空的。

此外,错误参数是有原因的,您可以捕获错误参数并检查它们:

if(err) console.log(err) else //rest of program

同样err2

if(err2) console.log(err2) else //rest of program

这绝对有助于解决问题

修改

你把调试行放在哪里?

显然你需要调试的地方

喜欢

function(err,rows,fields){ console.log(rows); //undefined if empty if(err) console.log(err); else //rest code }

答案 1 :(得分:0)

您是否尝试过Async

connection.query('select * from `test` WHERE `deny`=false',function(err,rows,fields) {

    for (var i=0; i<rows.length; i++){
        if (rows[i].enddate == mydate) {
            myFuntion(row[i], function(msg) {
                console.log(msg) // Success!
            })
        }
    }
})

function myFuntion(row, callback) {
    async.waterfall([
        function(callback) {
            msg = "message";
            connection.query('select * from `cash` WHERE `id`=test',function(err2,rows2,fields2){
                callback(null, rows2);
            });
        }, function(rows2, callback) {
            if (rows2[0].cash >= 30)
            {
                connection.query('UPDATE `cash` SET `cash`='+ rows2[0].cash-30 +' WHERE `id`=test',function(err3,rows3,fields3){
                    msgsend(row.contact,msg);
                    callback(null);
                });
            }
        }
    ], function(err){
        if(err)
            console.log("Error: ", err);
        else
            callback("Success!");
    })
}