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

时间:2017-08-22 10:07:54

标签: node.js promise async.js

我通过帮助文件连接来自已定义用户的推文并尝试在我的server.js中检索它,但是str值仍未定义(并且此行首先执行),然后是console.log从我的助手打印出正确的值。

输出:

  

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

     

服务器中的连锁推文:未定义

     

Helper中的连锁推文:测试推文3 #TestTweet测试推文2   测试推文1

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

1 个答案:

答案 0 :(得分: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);
    });
}));

我希望这对你有用。