【发布时间】:2019-07-11 17:17:38
【问题描述】:
我正在尝试使用 JavaScript 和 Node.JS 制作一个小型 Twitter 机器人。但是,在一个函数中,我所有的 console.log 都显示在最后。
我尝试过异步、回调和经典函数,但我总是得到相同的输出。
getTweets: function(Twitter, callback) {
Twitter.get(`search/tweets`, this.parameters, callback);
},
likeTweet: function(Twitter, tweetid, callback) {
Twitter.post(`favorites/create`, { id:tweetid }, callback);
},
execute: function(Twitter) {
let count = 0;
let done = 0;
this.getTweets(Twitter, (err, tweets) => {
for (thetweet of tweets.statuses) {
if (typeof thetweet === `undefined`) {
continue;
}
count++;
this.likeTweet(Twitter, thetweet.id_str, (err, reponse) => {
if (err) {
switch (err.code) {
case 139: console.log(`Tweet ${count}:`.bold.yellow + ` Le tweet a déjà été aimé par le bot.`); break;
default: console.log(`Tweet ${count}:`.bold.red + ` Erreur inconnue => ${err}`); break;
}
} else {
console.log(`Tweet ${count}:`.bold.green + ` Tweet aimé`);
done++;
}
});
}
});
}
在调用 execute() 之前,我有一个 console.log(1)。在execute()之后,还有一个console.log(3)。而在 execute() 中,有显示文本的 console.log()。 (是的,我知道,有很多 console.log)
我想要那个:
1
推文 1:文字
推文 2:文字
推文 3:文字
...
3
但是,当我运行 bot.js 时,我得到了这个:
1
3
推文 15:文字
推文 15:文字
推文 15:文字
...
我很确定问题很容易发现,但我不知道该怎么做。我希望我足够清楚,并且我的信息不会犯太多错误。
【问题讨论】:
-
你在这里使用
await和回调:/为什么? -
事实上,我很确定我忘记删除它们了。但是即使没有
await和async,问题还是一样 -
stackoverflow.com/questions/44512388/… - 如果您想了解更多关于 async 和 await 用法的信息,这是一个很好的主题,这里提供了一些示例,您可能会觉得有用。
-
谢谢,我会看这个帖子
-
@EmpireDémocratiqueduPoulpe 问题本身与 Promises 或
async/await无关 - 这是一个非常常见的closure problem
标签: javascript node.js