首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Node.js中使用异步函数返回的数据?

如何在Node.js中使用异步函数返回的数据?
EN

Stack Overflow用户
提问于 2013-11-21 14:10:49
回答 2查看 2K关注 0票数 4

我想要定义一个函数,从GET请求的响应中获取特定ID的列表:

代码语言:javascript
运行
复制
var getList = function (){

    var list = [];

    https.get(options).on('response', function (response) {
        var body = '';
        response.on('data', function (chunk) {
            body += chunk;
        });
        response.on('end', function () {
            var obj = JSON.parse(body);
            for (i=0 ; i<obj.length ; i++){
                list.push(obj[i].id);
            }
            //console.log(list);
            //return list;
        });
    });
};

现在,我想在其他函数中使用这个函数中的列表,或者简单地将它赋值给一个变量。我了解到,由于函数是异步的(嗯,https.get函数),返回列表并不意味着什么,因为其他代码不会等待这个函数完成。我是否必须将所有剩余的代码放入response.end调用中?我知道我错过了一些很明显的东西..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-21 14:16:45

您可以接受回调作为参数,并使用response.end处理程序中的相关数据调用它:

代码语言:javascript
运行
复制
var getList = function (successCallback){

    var list = [];

    https.get(options).on('response', function (response) {
        var body = '';
        response.on('data', function (chunk) {
            body += chunk;
        });
        response.on('end', function () {
            var obj = JSON.parse(body);
            for (i=0 ; i<obj.length ; i++){
                list.push(obj[i].id);
            }

            // invoke the callback and pass the data
            successCallback(list);
        });
    });
};

然后可以调用getList函数并传入回调:

代码语言:javascript
运行
复制
getList(function(data) {
    // do some stuff with 'data'
});

当然,其他选项是使用一些实现应许模式的库来避免回调地狱。

票数 4
EN

Stack Overflow用户

发布于 2013-11-21 14:15:41

使列表成为全局的或可访问的

代码语言:javascript
运行
复制
var list = []

//declare a get method

function getUpdatedList(){
  return list;
}

如果在ajax完成之前调用,您将得到实际的数据数组,但在正常情况下只使用回调函数,如

代码语言:javascript
运行
复制
function getList(callback){

    ///
    //
    response.on('end', function () {
        var obj = JSON.parse(body);
        for (i=0 ; i<obj.length ; i++){
            list.push(obj[i].id);
        }
        callback(list);
    });
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20123187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档