javascript - NodeJS 中嵌套函数的返回值

标签 javascript node.js

我正在尝试从 Nodejs 应用程序中的函数内部函数返回值。它总是显示为未定义。

var geo = {
    list: function(callback){
        var returnval;
        gapi.getcodes(function(error, data) {
            if (error) {
               console.log(error);
             } else {
               returnval = data; 
               console.log(returnval);
            }                        
        });
        callback(returnval);                
      }            
}

var geocodes = geo.list(function(){});
console.log("Value of geocodes: "+geocodes);

我知道gapi.getcodes是异步函数,我在另一个thread上读到我应该传递回调函数来获取返回值。但地理编码的值(value)仍然是未定义的。

当代码运行时,我看到返回的值

console.log(returnval)

。 如何将此值存储在 var 中?

我不知道出了什么问题。请帮助我尝试学习 javascript 和对象样式模式。

最佳答案

geo.list() 不会返回您的答案。事实上,该函数不会返回任何内容,因此 geocodes 将按照您的方式未定义。

相反,需要修改 geo.list() ,以便将 data 值作为参数传递给回调,因为仅当异步 getcodes 回调被调用时 future 才是真正可用的数据。

因此,您可以通过在回调函数本身中使用结果来使用它(这就是它的用途):

var geo = {
    list: function(callback){
        gapi.getcodes(function(error, data) {
            if (error) {
                callback(error);
            } else {
                callback(null, data);
            }                        
        });
      }            
}

geo.list(function(err, geocodes){
    // because the result here is asynchronous, you can ONLY use it
    // in this callback or in any function you pass it to from here
    if (!err) {
        console.log("Value of geocodes: "+geocodes);
    }
});

实际上,还可以做得更简单:

var geo = {
    list: function(callback){
        gapi.getcodes(callback);               
      }            
}

geo.list(function(err, geocodes){
    // because the result here is asynchronous, you can ONLY use it
    // in this callback or in any function you pass it to from here
    if (!err) {
        console.log("Value of geocodes: "+geocodes);
    }
});

但是,通过这个更简单的实现,您可以看到 geo 对象根本没有真正添加任何值,因为它只是复制现有 API,而不添加任何额外的功能。

关于javascript - NodeJS 中嵌套函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28576391/

相关文章:

javascript - 如何选择多个元素

javascript - 使用 Node 在内存中处理大型 JSON 数据集

node.js - ./server.ts 模块中的错误未找到 : Error: Can't resolve './dist/server/main.bundle' in . ..@ ./server.ts 16:9-45

node.js - Node 为 : hgetall returns true, 的 Redis 但回调返回 null

javascript - Protractor 和异步/等待

javascript - 动态构建表时事件在 JQuery 中不起作用

node.js - kafka Node 无法在本地环境中连接到kafka服务器

带有 socket.io 的 Node.js

javascript - 对于多个空格,按照 typescript 中的正则表达式分割字符串无法按预期工作

javascript - Node.js 和 Mongoose 返回 2D 查询