Node.jsでTwitter APIを使うときはTwitterを使うのが多い気がするのですがサンプルだとasync/awaitやPromiseの例が無さそうだったので調べたらできたのでメモしておきます。(タイトルの表現が不安)

Node.js 8: util.promisify() この辺を使うかと思いきや使わずにできました。

通常だとコールバック地獄になっていく

なんでもいいんですけど、例として今回は ツイートを検索(search/tweets)をして、その内容を自分のツイートとしてパクツイする機能を作ります。

通常だと search/tweetsのメソッドを呼んだあとのコールバックでstatuses/updateを呼び出してその中のコールバックで結果を見ます。

app.js
'use strict';

const twitter = require('twitter');
const client = new twitter({
    consumer_key: '', // consumer keyを記入
    consumer_secret     : '', // consumer secretを記入
    access_token_key    : '', // access tokenを記入
    access_token_secret : '' // access token secretを記入
});

client.get('search/tweets', {q: 'node.js'}, (error, tweets, response) => {
    const text = tweets.statuses[0].text; //検索して引っかかった1件目のツイート本文
    client.post('statuses/update', {status: text}, (error, tw) => { //パクツイ
        if (error) {
            console.log(error);
            return;
        }
        console.log(`id: ${tw.id}, text: ${tw.text}`);
    });
});

async/awaitで書くとスッキリ

この辺をみると内部ではrequestモジュールを使ってるみたいで、requestモジュールがPromise対応しているみたいなのでasync/awaitが使えました。

app.js
'use strict';

const twitter = require('twitter');
const client = new twitter({
    consumer_key: '', // consumer keyを記入
    consumer_secret     : '', // consumer secretを記入
    access_token_key    : '', // access tokenを記入
    access_token_secret : '' // access token secretを記入
});
//async/awaitで表現
const main = async () => {
    const tweets = await client.get('search/tweets', {q: 'node.js'});
    const text = tweets.statuses[0].text; //検索して引っかかった1件目のツイート本文
    const res = await client.post('statuses/update', {status: text}); //パクツイ
}

main();