Search code examples
node.jskoakoa2

Koa.js wait until execution completes


In my application, I have used express as a framework for node.js and used mssql to connect to my DB.

Now, I tried to use Koa.js framework instead of express. I tried to call the service using 'Koa-router' but it returns 'Internal Server Error'.

When I tried to debug it using console, the console contains the expected result but the variable is returned before the execution of query completes.

I have used router in app.js as:

var koa = require('koa');
var route = require('koa-router');
var serverApi = require("./controllers/serverController.js");

router.get('/getTask', async (ctx, next) => {
    var tasks = await serverApi.getTaskMtd(ctx, next);
    if (!tasks) {
        throw new Error("There was an error retrieving your tasks.")
    } else {
        ctx.body = tasks
    }
});

My controller page is separate and is as follows:

exports.getTaskMtd = async (ctx) => {
    var sql = "SELECT * FROM tasks";
    db.executeMultipleSql(sql, function(data, err){
        if(err){
        }
        else{
            ctx.body = lookupRes;
        }
    });
}

Please, let me know where i have to make change to get the result as expected. (to get the result after the execution completes)


Solution

  • you have to make your getTaskMtd return a promise to be awaitable...

    exports.getTaskMtd = (ctx) => {
        var sql = "SELECT * FROM tasks";
        return new Promise((resoleve,reject)=>{
            db.executeMultipleSql(sql, function(data, err){
                if(err){
                    reject(err)
                }else{
                    resolve(data)
                }
            });
        })
    
    }