2016-10-31 2 views
0

Я пишу приложение с node.js об использовании Twitter api. функция, как показано ниже:Задание задачи управления в фоновом режиме node.js

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).

Пожалуйста, помогите! Спасибо всем.

ответ

0

Если потребуется, клиент запросит время ожидания. Вам нужно будет добавить маршрут статуса/результата, который клиент может опросить.

Также я рекомендую создать отдельный модуль для checkusername getfollowers и т. Д., Который может вызвать маршрут статуса. И используя async/await и синтаксис стрелки сделают код чище.

+0

Клиент не должен следовать за ним, только я в бэкэнде хочу знать. get_followers func запустить фон, и я буду следовать за ним консолью или чем угодно .. –

Смежные вопросы