【问题标题】:Control task run in background node.js控制任务在后台运行 node.js
【发布时间】:2016-11-01 08:18:26
【问题描述】:

我正在用 node.js 编写一个关于使用 Twitter api 的应用程序。 函数如下:

app.get('/api/get_follower', function(req, res){
    var username = req.query.username
    var client =  new twitter({
        consumer_key: global.twitter_consumer_key,
        consumer_secret: global.twitter_consumer_secret,
        access_token_key: global.token_access,
        access_token_secret: global.token_secret
    });

    check_username(username)
    .then(function(data){
        res.status(200).end()

        // this code below will run in background.
        // I want to follow it and it will throw to me if error or inform me when success
        // and if server will be crashed, it will run continue from that time (if can)
        return get_followers(client, -1, [])

    }, function(err){
        res.statusMessage = 'user not found'
        res.status(404).end()
    })

})

var check_username = function(req, res){
    return new Promise(function(resolve, reject){
        client.get(link, function(err, data){
            if(err){
                reject(err)
            }else{
                resolve(data)
            }
        })
    })
}

var get_followers = function(client, cursor, data){
    return new Promise(function(resolve, reject){
        client.get(link, function(err, _data){
            if(err){
                setTimeout(function() {
                    get_followers(client, cursor, data)
                }, 30000);
            }else{
                var data = data.concat(_data.users)
                if(_data.next_cursor != 0){
                    setTimeout(function() {
                        get_followers(client, _data.next_cursor, data)
                    }, 30000);
                }else{
                    resolve(data)
                }
            }
        })
    })
}

Func get_followers 需要更多时间才能完成,所以我想在后台运行它,客户端不关心它,只检查用户名和响应。但我想跟踪在后台运行的任务,如果失败或成功会通知我(控制台...)。而且如果同时对我的路由器有很多请求,不会影响性能...

我找到了“队列”模块,但不知道如何在我的案例中应用它(get_followers)。

请帮忙!谢谢大家。

【问题讨论】:

    标签: node.js message-queue task-queue


    【解决方案1】:

    如果需要这么长时间,客户端请求将超时。您将需要添加客户端可以轮询的状态/结果路由。

    我还建议为 checkusername getfollowers 等创建一个单独的模块,状态路由可以调用该模块。并且使用async/await 和箭头语法将使代码更清晰。

    【讨论】:

    • 客户端不需要关注,只有我在后台想知道。 get_followers func 运行后台,我将通过控制台或任何东西跟踪它..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2020-10-24
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多