2016-10-31 4 views
0

Twitter API를 사용하는 것에 대해 node.js로 애플리케이션을 작성하고 있습니다. 다음과 같은 기능 :백그라운드에서 실행되는 제어 작업 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는 백그라운드를 실행하고 나는 콘솔이나 다른 것으로 그것을 따라 할 것입니다 .. –

관련 문제