var bodyvl = yield get_search_data(page,cityId);
get_search_data = function(key,start,end){
return function(cb){
var http = require('http');
var qs = require('querystring');
var data = {
page:1,
cityId:1
};
var content = qs.stringify(data);
var http_request = {
};
var req = http.request( http_request,function(response){
var body = '';
response.setEncoding('utf-8');
response.on('data',function(chunk){
body += chunk;
});
response.on('end',function(){
cb(null,body);
});
});
req.end();
}
}
我是想问一下,这段代码是做一个 http 请求并返回结果的,我想知道为什么这样可以返回结果阿?
cb(null,body)是什么?
我用 async/await 写的话就不行了。
1
whypool 2017-12-04 13:57:41 +08:00 1
cb 回调啊;
async/await 可以用,但是 request 得返回一个 promise; 重新封一下 request 就行; let requestFunc = ()=>{ return new Promise((resolve,reject)=>{ http.request('url',(response)=>{ resolve(response) }) }); } 调用: (async()=>{ let data = await requestFunc(); console.log(data); })() |
2
zenxds 2017-12-04 14:06:47 +08:00
现在还在用 koa 1.x 么
|
3
sologgfun OP @whypool
① 这个回调是什么阿? cb()是个函数吗?哪来的阿? ②封装一下确实可以了,不过 resolve(response)得到的内容不对欸,我把 resolve(response)写在 response.on('data',function(chunk){ body += chunk; resolve(response); }); 的话没有办法得到全部的内容,只有一小部分,是为什么阿? 求指教,谢谢! |
5
hyyou2010 2017-12-04 14:57:53 +08:00
不负责的猜测:
cb 是个函数,从最上面那个 return 行传进来的 这个 cb 函数约定第一个参数是 err,第二个参数是 body(当 err 为 null 时) |