Explorar el Código

optimize backtracking

Mike L hace 3 años
padre
commit
d6e7db4a2d
Se han modificado 2 ficheros con 16 adiciones y 9 borrados
  1. 6 4
      dist/twitter.js
  2. 10 5
      src/twitter.ts

+ 6 - 4
dist/twitter.js

@@ -247,7 +247,7 @@ class default_1 {
                     const offset = lock.threads[currentFeed].offset;
                     if (offset > 0)
                         config.since_id = offset;
-                    this.client.get(endpoint, config, (error, tweets, response) => {
+                    const getMore = (gotTweets = []) => this.client.get(endpoint, config, (error, tweets) => {
                         if (error) {
                             if (error instanceof Array && error.length > 0 && error[0].code === 34) {
                                 logger.warn(`error on fetching tweets for ${currentFeed}: ${JSON.stringify(error)}`);
@@ -259,11 +259,13 @@ class default_1 {
                             else {
                                 logger.error(`unhandled error on fetching tweets for ${currentFeed}: ${JSON.stringify(error)}`);
                             }
-                            resolve([]);
                         }
-                        else
-                            resolve(tweets);
+                        if (!tweets || tweets.length <= 1)
+                            return resolve(gotTweets);
+                        config.max_id = tweets.slice(-1)[0].id_str;
+                        getMore(gotTweets.concat(tweets));
                     });
+                    getMore();
                 }
             });
             promise.then((tweets) => {

+ 10 - 5
src/twitter.ts

@@ -403,9 +403,11 @@ export default class {
       }
 
       if (endpoint) {
-        const offset = lock.threads[currentFeed].offset as unknown as number;
-        if (offset > 0) config.since_id = offset;
-        this.client.get(endpoint, config, (error: {[key: string]: any}[], tweets, response) => {
+        const offset = lock.threads[currentFeed].offset;
+        if (offset as unknown as number > 0) config.since_id = offset;
+        const getMore = (gotTweets: Tweets = []) => this.client.get(
+          endpoint, config, (error: {[key: string]: any}[], tweets: Tweets
+        ) => {
           if (error) {
             if (error instanceof Array && error.length > 0 && error[0].code === 34) {
               logger.warn(`error on fetching tweets for ${currentFeed}: ${JSON.stringify(error)}`);
@@ -416,9 +418,12 @@ export default class {
             } else {
               logger.error(`unhandled error on fetching tweets for ${currentFeed}: ${JSON.stringify(error)}`);
             }
-            resolve([]);
-          } else resolve(tweets);
+          }
+          if (!tweets || tweets.length <= 1) return resolve(gotTweets);
+          config.max_id = tweets.slice(-1)[0].id_str;
+          getMore(gotTweets.concat(tweets));
         });
+        getMore();
       }
     });