看图,我用是request库,而request请求github的接口,然后设置给ctx.body,这里,我有个疑问,request不是异步的吗?为什么这里就可以直接赋值给ctx.body呢?而且这样写,你调用接口,确实能正确返回结果。
看图,我用是request库,而request请求github的接口,然后设置给ctx.body,这里,我有个疑问,request不是异步的吗?为什么这里就可以直接赋值给ctx.body呢?而且这样写,你调用接口,确实能正确返回结果。
正确返回结果是什么意思request
返回的是个Request
对象而不是接口的返回值吧,如果你没对request做任何处理,你的data
应该是个有 '_tunnel', 'headers', 'setHeader', 'hasHeader', 'getHeader',
这些属性的Request
对象。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
这里能顺利返回,有运气成分在里面,不建议这样使用。
为什么能成功
首先,
request(xxx)
返回的是个Stream实例然后,当
ctx.body
是Stream实例时,koa做了特殊处理,采用了pipe,因此虽然request(xx)
是异步的,但还是能成功返回的原因。更好的姿势
用
await asyncFn()
来获取结果,可以自己封装这里的asyncFn
,也可以采用官方的版本。