2

我正在尝试使用https://github.com/jdub/node-twitter从 Twitter 检索我的最后一条推文

我想声明一个变量,在函数内更改该变量,然后在该函数外再次使用它。这可能吗?

我已经通过身份验证,如果我这样做,可以看到我的最后一条推文:

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);

推文仍未定义。

请教育我:-)

4

1 回答 1

6

您希望能够立即 console.log,但 node.js 不是同步的,这就是它如此强大和快速的原因。您必须习惯使用 node.js 进行异步编码模式。获取请求是异步的。在回调发生之前不会分配推文。

Console.log 在异步请求发出后立即执行。

尝试:(编辑-我建议这样做,然后编辑问题以包含此代码)

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 调用的第二个参数是一个匿名函数,它将在完成异步请求后执行。

它的输出应该是“请求发送”,然后是推文结果。

于 2012-07-04T13:42:43.477 回答