Javascript 从节点模块内部返回嵌套函数
我在app.js文件中使用require()触发一个函数,返回的结果是“未定义”。我认为这是因为函数被嵌套了。返回嵌套值的最佳方式是什么。我尝试了下面的方法,但函数似乎是异步的,在提供数据之前返回的值是未定义的 应用程序示例代码-- 模块示例代码-Javascript 从节点模块内部返回嵌套函数,javascript,node.js,nested,promise,Javascript,Node.js,Nested,Promise,我在app.js文件中使用require()触发一个函数,返回的结果是“未定义”。我认为这是因为函数被嵌套了。返回嵌套值的最佳方式是什么。我尝试了下面的方法,但函数似乎是异步的,在提供数据之前返回的值是未定义的 应用程序示例代码-- 模块示例代码- app.get("/twitter/:handle", function (req, res) { var handle = req.params.handle; var twitter = require('./module/tw
app.get("/twitter/:handle", function (req, res) {
var handle = req.params.handle;
var twitter = require('./module/twitter');
var data = twitter.searchHandle(handle);
console.log(data);
res.sendStatus(data);
});
var-twitter={
searchHandle:函数(句柄){
var数据返回;
T.get('search/tweets',{q:handle,count:100},函数(err,data,response){
dataToReturn=数据;
});
返回(数据返回);
}
};
module.exports=twitter代码>searchHandle
是一个异步调用。返回的dataToReturn
将始终是未定义的,因为其值尚未填充。您需要将回调函数传递给searchHandle
,以便在填充dataToReturn
后执行
//app.js
var handle = req.params.handle;
var twitter = require('./module/twitter');
var data = twitter.searchHandle(handle, function (data) {
console.log(data);
res.sendStatus(data);
});
//twitter.js
var twitter = {
searchHandle: function(handle, callback){
T.get('search/tweets', { q: handle, count: 100 }, function(err, data, response) {
callback(data);
});
}
};
module.exports = twitter;
你好,谢谢你的回复。“console.log”正在返回正确的数据。而回调或承诺是有意义的。但是,当从app.js运行函数“即twitter.searchHandle(handle)”时,返回未定义的函数。添加回调后,此问题仍然存在,不是吗?如果console.log返回了正确的数据,则它正在工作。我建议您仔细阅读javascript中的异步回调。这需要一些时间来适应,而且在大多数情况下,您必须重新培训自己,以了解哪些函数需要回调。“问题”(正如您所说)实际上不是一个问题,而是nodejs架构的一个预期方面。方法searchHandle
将始终(并且应该)返回undefined
,除非它是一个承诺。dataToReturn
hack无法工作,T.get
甚至进行回调而不是直接返回值的全部原因是因为它是异步的。如果它是同步的,它将在函数调用中直接向您返回值。