2017-08-22 9 views
2

定義されたユーザーからのツイートをヘルパーファイルで連結し、server.jsで取得しようとしていますが、strの値は未定義です最初に実行される)、私のヘルパーからのconsole.logが正しい値で表示されます。Node.js内の別のファイルで同期して戻り値を使用する

出力:

GET /ログイン/ Twitterの/コールバック302 618.242ミリ秒 - サーバーで0

連結ツイート:未定義のヘルパーで

連結ツイート:テストさえずる3 #TestTweetテストツイート2 テストツイート1

誰でもtwitter rHelper.getTweets関数はサーバーで返されたstrを取得しますか?ありがとう!

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; 
        } 
      ); 

答えて

0

の代わりにあなたが約束することで、この簡単な方法を使用することができ、このロングウェイを使用しました。

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); 
    }); 
})); 

私はこれがあなたのために働くことを願っています。

関連する問題