如何将js回调函数中的数据返回给最外层函数?

我希望在nodejs中封装一个模块用于返回http请求的数据,基本的结构是这样:

const http=require('http');

function getData(url){
    http.get(url,function(res){
        var body='';
        res.on('data',function(str){
            body+=str;
        });
        res.on('end',function(){
            var result=JSON.parse(body);
            //将result返回到getData外面
        })
    });
}

module.exports=getData;

最后可以通过调用getData函数返回数据。

所以问题是:

1.如果不借助promise和async function的话要怎么实现呢?能实现吗?

2.如果我向下面一样直接返回,那返回值到底去哪里了?能取到吗?

res.on('end',function(){
            var result=JSON.parse(body);
            //将result返回到getData外面
            return result;
        })
阅读 16.9k
5 个回答

1.返回数据受res Event的限制,是一个异步操作。因此不用promiseasync await的话是无法实现的。

2.这个return是无法直接获取的。退一步,即使获取了也还是在http.get的回调函数里面,无法实现题目要求。

通过res.on绑定事件,当 检测到end事件时触发回调函数。没法同步return 数据的。这样的module.exports=getData导出结果也没什么意义。

1.是否可以在http外声明一个变量?在res end的时候把返回值赋给 这个变量,然后同样在http外return这个变量
2.在res.on事件内return是不会在调用的时候抛到函数的最外层的

可以加个回调函数,调用的时候传进去就行了

function getData(url,callback){
    http.get(url,function(res){
        var body='';
        res.on('data',function(str){
            body+=str;
        });
        res.on('end',function(){
            var result=JSON.parse(body);
            //将result返回到getData外面
            callback && callback(result)
        })
    });
}

//调用
getData(url,function(data){
    //你的操作
})
推荐问题
宣传栏