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

发布于 2022-09-06 15:52:11 字数 717 浏览 19 评论 0

我希望在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;
        })

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

娇纵 2022-09-13 15:52:12

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

不离久伴 2022-09-13 15:52:12

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

╭⌒浅淡时光〆 2022-09-13 15:52:12

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

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){
    //你的操作
})
胡大本事 2022-09-13 15:52:11

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

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

等待圉鍢 2022-09-13 15:52:11

可以尝试使用:https://github.com/ForbesLind...
但是还是推荐使用异步来实现

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文