【问题标题】:Twitter API and NodeTwitter API 和节点
【发布时间】:2012-07-05 00:37:07
【问题描述】:

我正在尝试使用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);

推文仍未定义。

请教育我:-)

【问题讨论】:

    标签: javascript node.js asynchronous twitter


    【解决方案1】:

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

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

    【讨论】:

    • 酷,谢谢。我更好地理解了 Node 的异步性质以及为什么 tweet 最初显示为未定义。我仍然希望能够在我的代码后面的函数中使用 tweet 变量。这是可能的还是我必须将这些函数嵌套在 get 的回调中?我怎么能确定它在调用其他函数之前已经收到了推文!
    • 如果在收到get后需要执行其他代码,并且依赖于该get的结果,那么可以在get的回调函数中调用该代码。
    • 谢谢。我希望我可以投票给你的答案,但我还没有声誉:-(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2012-10-08
    • 1970-01-01
    • 2018-05-07
    相关资源
    最近更新 更多