2015-04-08 4 views
0

У меня есть этот код в Node.js и я использую Twit:Возвращения/получать выход из client.get упрека в

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 выполняется параллельно с остальной частью скрипта; как я могу заставить его не делать этого?

ответ

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); 
}) 
+0

код я был бы в конечном счете завернутые в метод, который возвращает результат и затем быть отправлен в браузер, я полагаю, что функция 'handleData()' может выполнить отправку. – jksnw

Смежные вопросы