Nodejs异步回调问题

时间:2018-01-17 07:58:06

标签: node.js

我想制作一个具有查询功能的聊天机器人。我正在尝试为我的项目实现回调函数。

我在下面写了两个函数: encodeData():拆分换行符“\ n”,用于查询条件。 queryData():在进行查询以获得结果之前从encodeData()获取条件。

然而,我遇到了一个问题。为什么queryData()在启动时运行了4次。 和queryData()没有返回任何内容。有人可以帮我解决这个问题吗?谢谢〜

var async = require('async');
var sql=require('mssql');

var text = "";

async.parallel([
    function(queryData){
        text = encodeData("QQQQ\nEEEE\nCCCC\nDDDD\n", queryData);
    }], function(){
        //after that send message to someone.
        console.log("result: "+text);
});


function encodeData(text,callback){

    text = text.replace(/ +/g,""); 
    var result = text.split("\n");

    for (i = 0; i < result.length; i++) { 
        if(result[i].trim().length > 0) { 
            text += queryData(result[i]);
        } 
    }

    return callback(text);
}

function queryData(message){

    sql.close();
    var message = "";

    sql.connect(config,function (err) {
        if(err) console.log(err);

        var request=new sql.Request();

        request.query("select * from order where 1=1 and no = '123456'" ,function(err,recordset){
            if(err) { 
                console.log(err);
                message = "failure";
            } else {
                console.log(recordset);
                message = "success";
            }
        });
    });

    return message;
}

1 个答案:

答案 0 :(得分:0)

Yous应在null函数的第一个callback参数中发送encodeData参数

async.parallel([
   function(queryData){
       text = encodeData("QQQQ\nEEEE\nCCCC\nDDDD\n", queryData);
}], function(error, result) {
    // Catch error 
    if (error)
         return console.error(error);

    //after that send message to someone.
    console.log("result: "+text);
});


function encodeData(text,callback){

   text = text.replace(/ +/g,""); 
   var result = text.split("\n");

   for (i = 0; i < result.length; i++) { 
     if(result[i].trim().length > 0) { 
        text += queryData(result[i]);
      } 
   }

   /*
    * If you have cache error or no have error you should send null
    */
   return callback(null, text);
}