2017-08-22 2 views
2

Je concaténer tweets d'un utilisateur défini par un fichier d'aide et d'essayer de le récupérer dans mes server.js mais la valeur str est toujours définie (et cette ligne obtient exécuté en premier), puis le fichier console.log de mon assistant imprime avec la bonne valeur.En utilisant la valeur de retour dans un autre fichier dans Node.js synchroniquement

Sortie:

GET/login/twitter/rappel 302 618,242 ms - 0

Tweets concaténé Serveur: non défini

Tweets concaténé Aide: Test Tweet 3 #TestTweet test Tweet 2 Test Tweet 1

Quelqu'un peut-il aider sur quel flux de contrôle je devrais utiliser pour appeler twitte rHelper.getTweets fonctionne pour obtenir le str retourné dans le serveur s'il vous plaît? Merci!

Server.js

app.get('/login/twitter/callback', 
    passport.authenticate('twitter', {failureRedirect: "/login"}, 
     function(req, res) { 
      // auth success 
      async.waterfall ([ 
       function(callback) { 
        callback(null, twitterHelper.getTweets(user)); 
       }, 
       function(str, callback) { 
        console.log("Concatenated Tweets in Server: " + str); 
        callback(null); 
       } 
       ], 
       function(err) { 
        if(err) 
         console.log("Error: " + err);     
       } 
      ); 
     } 
    ) 
); 

Helper.js

var concatTweets = ''; 
var promise = new Promise( 
       function(resolve, reject) { 
        T.get('statuses/user_timeline', params, function(err, data, response) { 
         if(err) 
          reject(err); 
         else { 
          for (var i = 0; i < data.length ; i++) 
           concatTweets = concatTweets + " " + data[i].text; 
          resolve(concatTweets); 
         } 
        }) 
       } 
      ).then( 
        str => { 
         console.log("Concatenated Tweets in Helper: " + str); 
         return str; 
        }, err => { 
         console.log(err); 
         return err; 
        } 
      ); 

Répondre

0

Au lieu d'utiliser cette Longway vous pouvez utiliser cette façon simple par la promesse.

Helper.js

var concatTweets = ''; 
var getTweets = function(user){ 
    var promise = new Promise(function(resolve, reject) { 
     T.get('statuses/user_timeline', params, function(err, data, response) { 
      if(err){ 
       reject(err);  
      } else { 
       for (var i = 0; i < data.length ; i++) 
        concatTweets = concatTweets + " " + data[i].text; 
       console.log("Concatenated Tweets in Helper: " + concatTweets); 
       resolve(concatTweets); 
      } 
     }) 
    }); 
    return promise; 
} 

Server.js

app.get('/login/twitter/callback', passport.authenticate('twitter', {failureRedirect: "/login"},function(req, res) { 
    // auth success 
    twitterHelper.getTweets(user).then(str=>{ 
     console.log("Concatenated Tweets in Server: " + str); 
    }).catch(err=>{ 
     console.log("Error: " + err); 
    }); 
})); 

J'espère que cela fonctionnera pour vous.