我正在尝试从 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/