user3211705
user3211705

Reputation: 2578

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)

Upvotes: 1

Views: 1172

Answers (1)

Holger Will
Holger Will

Reputation: 7526

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)
            }
        });
    })

}

Upvotes: 2

Related Questions