在Node.js的另一个文件中同步使用返回值

我通过一个帮助文件连接来自一个已定义用户的tweets,并尝试在我的server.js中检索它,但是那里的str值仍然是未定义的(并且这条线首先被执行),然后我的帮助者的console.log用正确的价值。

输出:

GET / login / twitter / callback 302 618.242 ms – 0

服务器中的连接Tweets:未定义

助手级联推文:testing鸣叫3 #TestTweettesting鸣叫2testing鸣叫1

任何人都可以帮助我应该使用什么控制stream来调用twitterHelper.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; } ); 

而不是使用这个漫长的,你可以用诺言这个简单的方法。

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

我希望这会对你有用。