从异步回调中返回变量[Node.js]

时间:2016-03-01 16:43:21

标签: javascript node.js asynchronous promise node-mysql

我已经在这个项目工作了一个星期,我找不到使用Promise.js,Q.js,Async.waterfall的任何解决方案,但我无法得到我想要的输出。

此代码以node.js编写 我正在尝试检查CHARACTER是否在案例中(switch-case)如果为true,程序将使用异步函数检查Mysql数据库中的名称和其他信息。

如果数据库中存在的数据,程序将指定true,否则为false。

现在,真正的问题是,如果输入正确的值,函数将返回false。

这是我的示例代码

function checkPosCan(watcherid, message, cpnumber, json){
var correct = false;
var len = json.data.length;
for (var i = 0; i < len; i++) {
    var fn = (json.data[i].cfname).toLowerCase();
    var ln = (json.data[i].clname).toLowerCase();
    switch((json.data[i].cpos).toLowerCase()){
        case "g":
            getCandiName(fn, ln, "governor", function(dataa){
                console.log("count ", dataa.count, " id ", dataa.id);
                if(dataa.count != 1){
                    correct = false;
                    insertLogMessage(watcherid, message, cpnumber, json);
                    console.log("false sa g part");
                } else {
                    correct = true;
                    console.log("true sa g part");
                }
            });
            break;
        case "vg":
            getCandiName(fn, ln, "vice_governor", function(dataa){
                //console.log("data " , dataa.count, dataa.id);
                if(dataa.count != 1){
                    correct = false;
                    insertLogMessage(watcherid, message, cpnumber, json);
                } else {
                    correct = true;
                }
            });
            break;
        case "m":
            getCandiName(fn, ln, "mayor", function(dataa){
                //console.log("data " , dataa.count, dataa.id);
                if(dataa.count != 1){
                    correct = false;
                    insertLogMessage(watcherid, message, cpnumber, json);
                } else {
                    correct = true;
                }
            });
            break;
        case "vm":
            getCandiName(fn, ln,  "vice_mayor", function(dataa){
                //console.log("data " , dataa.count, dataa.id);
                if(dataa.count != 1){
                    correct = false;
                    insertLogMessage(watcherid, message, cpnumber, json);
                } else {
                    correct = true;
                }
            });
            break;
        case "bm":
            getCandiName(fn, ln, "board_member", function(dataa){
                //console.log("data " , dataa.count, dataa.id);
                if(dataa.count != 1){
                    correct = false;
                    insertLogMessage(watcherid, message, cpnumber, json);
                } else {
                    correct = true;
                }
            });
            break;
        case "cg":
        case "cm":
        case "cw":
            getCandiName(fn, ln, "congressman/woman", function(dataa){
                //console.log("data " , dataa.count, dataa.id);
                if(dataa.count != 1){
                    correct = false;
                    insertLogMessage(watcherid, message, cpnumber, json);
                } else {
                    correct = true;
                }
            });
            break;
        case "c":
            getCandiName(fn, ln, "councilor", function(dataa){
                //console.log("data " , dataa.count, dataa.id);
                if(dataa.count != 1){
                    correct = false;
                    insertLogMessage(watcherid, message, cpnumber, json);
                } else {
                    correct = true;
                }
            });
            break;
        default:
             pool.getConnection(function(err, con){
                /** invalid format **/
                con.query("insert into data_log (pw_party_id, message, created_date_stamp, status, status_date, remarks) VALUES (?,?,?,?,?,?)", [watcherid, message, dateFormat(now, "yyyy-mm-dd HH:MM:ss"), "rejected", dateFormat(now, "yyyy-mm-dd HH:MM:ss"), "err_code_03: This number " + cpnumber + " sends an invalid message format (positions). Message is REJECTED."] , function(err){
                    console.log(err);
                });
                 correct = false;
            });
    }
}
console.log("log from inside the function ", correct);
return correct;
}

并致电

console.log(checkPosCan(watcherid, message, cpnumber, json));

有人可以帮助我或者给我一些示例代码吗?我已经失去了2个晚上没有睡觉。

更新

我已经得到了答案:

Click link

@Felix Kling的学分

0 个答案:

没有答案