刚才试着用 Koa 2 写个应用,结果在使用 async/await 的时候有点迷糊。
我给自己的应用用 koa-router 这个中间件写了个路由,然后从远程 API 服务器上获取信息:
router.get('/bili/:vid', async (ctx, next) => {
try {
var result = await services.bilibili.video(this.params.vid);
ctx.body = result;
} catch (e) {
ctx.body = e;
}
});
但是在运行测试的时候发现它返回的内容直接是一个空对象,什么都没有,错误也没报:
HTTP GET: /bili/1145140
Response: {}
后来我不使用 router 中间件直接 app.use 发现功能一切正常:
app.use(async (ctx) => {
ctx.body = await services.bilibili.video(1145140);
});
Response: {"tid":59,"typename":"演奏",...(如下略过)
我确定在远程服务器上获取信息的函数返回的是 Promise 对象:
function getVideoInfo(vid) {
return new Promise((resolve, reject) => {
var reqmap = new Map();
reqmap.set('appkey', config.biliapi.appkey);
reqmap.set('id', vid);
reqmap.set('page', 1);
...(如下略过)
发现问题后我尝试在 Google 和 GitHub 上查找相关关键词但都没有找到类似的案例,不知道是什么问题造成的。
Koa 版本是 2.2.0 , Koa router 版本是 7.1.1 。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.