为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容708150 2019-03-14 18:13:52
我希望在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;        })
查看完整描述

5 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

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

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


查看完整回答
反对 回复 2019-03-18
?
呼如林

TA贡献1798条经验 获得超3个赞

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


查看完整回答
反对 回复 2019-03-18
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

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

查看完整回答
反对 回复 2019-03-18
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

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


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){

    //你的操作

})


查看完整回答
反对 回复 2019-03-18
  • 5 回答
  • 0 关注
  • 5386 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信