ctx.body在async / await函数中未定义

时间:2017-12-10 19:59:14

标签: node.js api server async-await koa

我试图从我的节点服务器返回koa到我的角度前端,这是api调用的结果。这是我的控制器,需要一个npm模块,可以访问他们的api。 Await应该等待结果而不是返回,我错了吗?我在之前的项目中做了类似的事情,但我在询问数据库中的数据。 为什么它不起作用?

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 undefined
  ctx.status=200;
};

1 个答案:

答案 0 :(得分:1)

你不能等待color.get,因为它使用回调而不是承诺(好吧,你可以等待它,但它没有做你期望的事) 。因此,要使用await,您需要自己构建承诺:

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

现在它等待承诺得到解决或拒绝。