Javascript 从节点模块内部返回嵌套函数

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.js文件中使用require()触发一个函数,返回的结果是“未定义”。我认为这是因为函数被嵌套了。返回嵌套值的最佳方式是什么。我尝试了下面的方法,但函数似乎是异步的,在提供数据之前返回的值是未定义的

应用程序示例代码--

模块示例代码-

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
甚至进行回调而不是直接返回值的全部原因是因为它是异步的。如果它是同步的,它将在函数调用中直接向您返回值。