2017-10-24 4 views
0

In meiner Anwendung habe ich Express als Framework für node.js verwendet und mssql verwendet, um eine Verbindung zu meiner DB herzustellen.Koa.js warten, bis die Ausführung abgeschlossen ist

Jetzt habe ich versucht, Koa.js Framework anstelle von Express zu verwenden. Ich habe versucht, den Dienst mit "Koa-Router" aufzurufen, aber es gibt "Interner Serverfehler" zurück.

Wenn ich versuchte, es mithilfe der Konsole zu debuggen, enthält die Konsole das erwartete Ergebnis, aber die Variable wird zurückgegeben, bevor die Ausführung der Abfrage abgeschlossen ist.

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

Meine Controller Seite ist separat und ist wie folgt:

Ich habe Router in app.js verwendete

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

Bitte, lassen Sie mich wissen, wo ich Änderung vornehmen müssen, um zu Erhalten Sie das Ergebnis wie erwartet. (Um das Ergebnis nach der Ausführung abgeschlossen ist)

Antwort

1

Sie haben Ihre getTaskMtd Rückkehr ein Versprechen machen awaitable zu sein ...

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

} 
+0

Vielen Dank .. Ich habe das Ergebnis wie erwartet .. Danke einmal nochmal... – user3211705

Verwandte Themen