2012-07-04 2 views
2

Я пытаюсь получить мой последний твит из Twitter с https://github.com/jdub/node-twitterTwitter API и Node

Я хочу объявить переменную, изменить эту переменную внутри функции, а затем использовать его снова вне этой функции. Это возможно?

Я заверены и может увидеть мой последний твит, если я:

var tweet; 

twit.get('http://api.twitter.com/1/statuses/user_timeline.json', function(data) { 
    tweet = data[0].text; 
    console.log(tweet); 
}); 

Но я хочу, чтобы отделить свой код и сделать:

var tweet; 

twit.get('http://api.twitter.com/1/statuses/user_timeline.json', function(data) { 
    tweet = data[0].text; 
}); 

console.log(tweet); 

Tweet еще не определено.

Пожалуйста, просветить меня :-)

ответ

6

Вы хотите, чтобы иметь возможность немедленно console.log но node.js не синхронны и то, что делает это настолько мощным и быстрым. Вы должны привыкнуть к асинхронному шаблону кодирования с node.js. Запрос get isync. Чирикать не назначается до тех пор, пока не произойдет обратный вызов.

Console.log выполняется сразу после запроса async.

Try: (Edit- я предложил это, а затем вопрос был отредактирован, чтобы включить этот код)

twit.get('http://api.twitter.com/1/statuses/user_timeline.json', function(data) { 
    tweet = data[0].text; 
    console.log(tweet); // executed after call returns 
}); 

// executes immediately after request is sent 
console.log("request sent"); 

Обратите внимание, что второй аргумент вызова twit.get является анонимная функция, которая будет выполнена после того, как получить него выполнил асинхронный запрос.

Результат этого должен быть «отправлен запрос», а затем результат твита в этом порядке.

+0

Прохладный, спасибо. Мне гораздо лучше понять асинхронную природу Node и почему твит впервые показывался как неопределенный. Тем не менее я хочу иметь возможность использовать переменную tweet в функциях позже в моем коде. Возможно ли это или мне нужно вложить эти функции в обратный вызов get? Как я могу быть уверен, что у него есть твит, прежде чем вызывать другие функции! – jaystewart

+0

Если другой код необходимо выполнить после получения get и зависит от результата этого get, тогда этот код можно вызвать в функции обратного вызова get. – bryanmac

+0

Спасибо. Мне жаль, что я не смог ответить на ваш ответ, но у меня пока нет репутации :-( – jaystewart