Node.jsでTwitterAPIを用いたアプリを作成しています。
Twitter認証にてログインしたユーザーのツイッターアカウントのフォロワーのIDを10人分取得してから、その10人のツイートを1つずつ取得する処理をしたいのですが、1つずつ取得するときに取得順がランダムになってしまいます。
client.get('statuses/user_timeline'~~~ の部分が非同期になっているのが問題であると分かってはいるのですが、どうしても非同期処理が上手くいきません。
該当箇所を同期的に処理できるようにしたいのですが、どう記述したら良いでしょう?
js
1 const loginUserParams = { user_id: value.twitterID, count: 10 };// 2 const followerParams = []; 3 const followers = new Promise ( (resolve, reject) => { 4 client.get('followers/list', loginUserParams, (error, followers, response) => { 5 if (!error) { 6 const followersArray = followers.users; 7 followersArray.forEach( (follower) => { 8 const screenName = '@' + follower.screen_name; 9 followerParams.push(screenName); 10 }); 11 resolve(followerParams); 12 } else { 13 reject(error); 14 } 15 }); 16 }); 17 18 followers.then((value) => { 19 for (const element of value) { 20 const params = { screen_name: element, count: 1};//paramsはfollowersで取得した順番通りになっている。 21 client.get('statuses/user_timeline', params , (error, tweets, response) => { 22 if (!error) { 23 const tweet = tweets[0].text; 24 console.log(tweet);//ここが取得した順にならない。 25 } 26 }); 27 } 28 });
試したこと
とにかくasync/awaitをfollowers.then(value => {})以下に入れてみましたが非同期になってしまいます。
js
1 const loginUserParams = { user_id: value.twitterID, count: 10 };// 2 const followerParams = []; 3 const followers = new Promise ( (resolve, reject) => { 4 client.get('followers/list', loginUserParams, (error, followers, response) => { 5 if (!error) { 6 const followersArray = followers.users; 7 followersArray.forEach( (follower) => { 8 const screenName = '@' + follower.screen_name; 9 followerParams.push(screenName); 10 }); 11 resolve(followerParams); 12 } else { 13 reject(error); 14 } 15 }); 16 }); 17 18 followers.then(async (value) => { 19 for await (const element of value) { 20 const params = { screen_name: element, count: 1}; 21 client.get('statuses/user_timeline', params , async (error, tweets, response) => { 22 if (!error) { 23 const tweet = await tweets[0].text; 24 console.log(tweet); 25 } 26 }); 27 } 28 });
回答2件
あなたの回答
tips
プレビュー