Atidor
Atidor

Reputation: 29

node.js query doesn't execute completely and turns back to the main block

I'm new to node.js. I'm trying to use it to create a bot. I need to execute a query in a function (for example checkUser) and then continue the rest of the code. but when the program reaches to the function after the query, it doesn't execute it and turns back to the main block. so the result of the checkuser function is pending and I can't use it!!

const SDK = require("balebot");
const BaleBot = SDK.BaleBot;
let bot = new BaleBot("5abf341d8924a1f41a00b08d3aebc205922f465b");

////connect to db
var sql = require('mssql');
var config = {
    user: 'adorfaki',
    password: '********',
    server: '192.168.44.89',
    database: 'MediatorData',
    port: 1433
};
var dbcon = new sql.ConnectionPool(config);
dbcon.connect().then(function () {
    var request = new sql.Request(dbcon);

    //start a conversation
    const Conversation = SDK.Conversation;
    let conv = new Conversation();
    bot.setConversation(conv);
    let tracer = conv.startsWith(['/start', 'start', 'Start', '/Start']);
    tracer.then((message, session, responder) => {
        responder.reply("Enter your user ID:");
        session.next();
    }).then((message, session, responder, ) => {
        if (message.text.length != 6) {
            responder.reply("User ID's length is incorrect!");
        } else {
            var UserID = ReturnUserID(message.text);
            var mIds = ReturnMessagesIds(UserID)
            for (var i = 1; i <= mIds.length; i++) {
                var Text = ReturnMessageText(i);
                responder.reply(text.MessageText);
            }

            async function ReturnUserID(Response) {
                try {
                    var result = await CheckUser(Response);
                    return true;
                } catch (error) {
                    responder.reply(error)
                };
            }

            async function ReturnMessagesIds(i) {
                try {
                    var result = await GetMessageIds(i);
                    return result;
                } catch (error) {
                    responder.reply(error)
                };
            }

            async function ReturnMessageText(MId) {
                try {
                    var result = await SelectMessageText(MId);
                    return result[0];
                } catch (error) { responder.reply(error) };

            }
        }

    });

    function CheckUser(Code) {
        return new Promise(function (resolve, reject) {
            request.query("select id from Recievers where UserCode=" + Code), then(function (Codes) {
                if (Codes.recordset.length != 0) {
                    resolve(Codes.recordset)
                } else {
                    reject("The User ID is incorrect!")
                }
            });
        });
    }

    function GetMessageIds(Uid) {
        return new Promise(function (resolve, reject) {
            request.query("select id from MessageSchedule where Userid=" + Uid).then(function (MessageIdList) {
                if (MessageIdList.recordset.length != 0) {
                    resolve(MessageIdList.recordset)
                } else {
                    reject("You don't have any message!")
                }
            });

        });

    }

    function SelectMessageText(index) {
        return new Promise(function (resolve, reject) {
            request.query("select MessageText from Messages m inner join MessageSchedule s on m.id=s.MessageID where s.id=" + [index]).then(function (texts) {
                if (texts.recordset.length != 0) {
                    resolve(texts.recordset)
                } else {
                    reject("Try Later!")
                }
            });

        });

    }
});

Upvotes: 2

Views: 53

Answers (0)

Related Questions