2017-12-10 3 views
0

Ich versuche, von meinem Knotenserver mit Koa zu meinem eckigen Frontend das Ergebnis eines API Anrufs zurückzukehren. Hier ist mein Controller, der ein npm-Modul benötigt, das Zugriff auf ihre API bietet. Warten Sie auf das Ergebnis warten und dann zurück, bin ich falsch? Ich habe etwas Ähnliches in einem früheren Projekt gemacht, aber ich habe Daten von einem DB gefragt. Ich benutze Knoten nur für eine Woche, kann jemand helfen, warum funktioniert nicht? thksctx.body undefined in async/Funktion abwarten

const color = require('colourlovers'); 

exports.getAllColors = async (ctx) => { 
    ctx.res.body = await color.get('/color/FFFFFF', { format: 'json' }, (err, data) => { 
    console.log(data);//<---here is logging the data 
    return data; 
    }); 
    console.log(ctx.res.body);//<---here is udefined 
    ctx.status=200; 
}; 

Antwort

1

können Sie nicht color.get erwarten, weil es Rückrufe statt Versprechungen verwendet (na ja, Sie können erwarten, aber es tut nicht das, was man erwarten würde). So verwenden await, müssen Sie das Versprechen, selbst bauen:

ctx.res.body = await new Promise((resolve, reject) => { 
    color.get('/color/FFFFFF', { format: 'json' }, (err, data) => { 
     if(err) reject(err); 
     else resolve(data); 
    }); 
}); 

Jetzt wird es warten, bis das Versprechen abgelehnt gelöst oder werden.