在功能结束时显示Console.log

时间:2019-07-11 17:17:38

标签: javascript node.js

我正在尝试使用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:文字

     

...

我很确定问题很容易发现,但是我不知道该怎么办。我希望我已经很清楚了,我的消息也不会犯很多错误。

1 个答案:

答案 0 :(得分:0)

await仅适用于Promises,不适用于回调函数。等待等待Promise完成。

您可以使用任何Promise库将Twitter回调函数设置为promise并对其使用await。我更喜欢蓝鸟。

import {Promise} from 'bluebird'
import {Twitter} from 'twitter'
Promise.promisifyAll(Twitter);

现在,您可以使用await并使它看起来像同步代码。

let tweets = await Twitter.get(`search/tweets`,parameters);