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

时间:2015-01-30 13:46:37

标签: javascript node.js nested promise

我在app.js文件中使用require()触发一个函数,返回的结果是'undefined'。我认为这是由于函数嵌套。返回嵌套值的最佳方法是什么。我尝试了下面的方法,但函数似乎是异步的,返回的值在提供数据之前返回为undefined。

app示例代码 -

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: function(handle){
      
        var dataToReturn;
        
		T.get('search/tweets', { q: handle, count: 100 }, function(err, data, response) {
			dataToReturn = data;
          
		});
        
        return(dataToReturn);
        
	}
};

module.exports = twitter;

1 个答案:

答案 0 :(得分:0)

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;