Koa.js дождаться завершения выполнения

В моем приложении я использовал экспресс в качестве основы для node.js и использовал mssql для подключения к моей БД.

Теперь я попытался использовать фреймворк Koa.js вместо экспресса. Я попытался вызвать службу с помощью «Koa-router», но она возвращает «Внутренняя ошибка сервера».

Когда я попытался отладить его с помощью консоли, консоль содержит ожидаемый результат, но переменная возвращается до завершения выполнения запроса.

Я использовал маршрутизатор в app.js как:

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

Моя страница контроллера является отдельной и выглядит следующим образом:

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

Пожалуйста, дайте мне знать, где я должен внести изменения, чтобы получить ожидаемый результат. (чтобы получить результат после завершения выполнения)


person user3211705    schedule 24.10.2017    source источник


Ответы (1)


вы должны заставить свой getTaskMtd вернуть обещание быть ожидаемым...

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

}
person Holger Will    schedule 25.10.2017