从Twit的client.get返回/获取输出

时间:2015-04-08 13:19:05

标签: javascript node.js twitter

我在node.js中有这个代码,我正在使用Twit:

var output = "Output: "
client.get('search/tweets', {q: "apple", count:5},
    function(err, data, response){
        for (var index in data.statuses) {
            var tweet= data.statuses[index];
            console.log('@' + tweet.user.screen_name + ': ' + tweet.text+'\n');
            output += '@' + tweet.user.screen_name + ': ' + tweet.text+'\n'
        }
    })
console.log(output);

这五条推文很好地打印到控制台但没有添加到输出中,所有从console.log(output);打印的都是Output:。此外,此行在推文之前打印,因此client.get函数必须与脚本的其余部分并行运行;我怎么能强迫它不这样做?

1 个答案:

答案 0 :(得分:0)

您要定义的功能:

function(err, data, response){
    for (var index in data.statuses) {
        var tweet= data.statuses[index];
        console.log('@' + tweet.user.screen_name + ': ' + tweet.text+'\n');
        output += '@' + tweet.user.screen_name + ': ' + tweet.text+'\n'
    }
})

称为回调。在get函数从服务器检索数据后,运行该回调函数。如果将console.log(output);移动到函数内部,就在for循环的正下方,它应该打印出您期望的内容。此外,你不能真正强迫它不平行,或者你不应该。服务器调用最好是异步完成的。只需通过调用回调中的另一个函数(如handleData)来执行数据所需操作,如下所示:

function(err, data, response){
    for (var index in data.statuses) {
        var tweet= data.statuses[index];
        console.log('@' + tweet.user.screen_name + ': ' + tweet.text+'\n');
        output += '@' + tweet.user.screen_name + ': ' + tweet.text+'\n'
    }
    handleData(data);
})