2016-10-31 1 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はバックグラウンドで実行され、コンソールなどでそれをフォローします。 –

関連する問題