看图,我用是request库,而request请求github的接口,然后设置给ctx.body,这里,我有个疑问,request不是异步的吗?为什么这里就可以直接赋值给ctx.body呢?而且这样写,你调用接口,确实能正确返回结果。
2 回答

翻过高山走不出你
TA贡献1875条经验 获得超3个赞
这里能顺利返回,有运气成分在里面,不建议这样使用。
为什么能成功
首先,request(xxx)返回的是个Stream实例
var request = require('request');
var re = request('xxx'); // 替换成实际资源
console.log( body instanceof Stream ); // 打印 true
然后,当ctx.body是Stream实例时,koa做了特殊处理,采用了pipe,因此虽然request(xx)是异步的,但还是能成功返回的原因。
if (body instanceof Stream) return body.pipe(res); // koa的源代码
更好的姿势
用await asyncFn() 来获取结果,可以自己封装这里的asyncFn,也可以采用官方的版本。

慕莱坞森
TA贡献1810条经验 获得超4个赞
正确返回结果是什么意思request
返回的是个Request
对象而不是接口的返回值吧,如果你没对request做任何处理,你的data
应该是个有'_tunnel', 'headers', 'setHeader', 'hasHeader', 'getHeader',
这些属性的Request
对象。
添加回答
举报
0/150
提交
取消