【问题标题】:Using return value in another file in Node.js synchronously在 Node.js 的另一个文件中同步使用返回值
【发布时间】:2018-01-30 13:39:52
【问题描述】:

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

输出:

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

服务器中的串联推文:未定义

帮助程序中的串联推文:测试推文 3 #TestTweet 测试推文 2 测试推文 1

谁能帮助我应该使用什么控制流来调用 twitterHelper.getTweets 函数来获取服务器中返回的 str?谢谢!

服务器.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; 
                    }
            );

【问题讨论】:

    标签: node.js promise async.js


    【解决方案1】:

    您可以通过承诺使用这种简单的方式,而不是使用这种长期方式。

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

    我希望这对你有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-28
      • 2015-07-16
      • 2017-01-19
      • 1970-01-01
      • 2016-02-22
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多