2016-10-31 7 views
0

Ich schreibe eine Anwendung mit node.js über die Verwendung von Twitter API. Funktion wie unten:Kontrollaufgabe im Hintergrund ausgeführt 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 wird mehr Zeit in Anspruch nehmen, so will ich es im Hintergrund laufen, Client dagegen tun es nicht darum, nur überprüfen Benutzernamen und Antwort für sie. Aber ich möchte der im Hintergrund ausgeführten Aufgabe folgen, wenn mich Fehler oder Erfolg informieren (Konsole ...). Und wenn viele Anfragen an meinen Router zur gleichen Zeit haben, wird die Leistung nicht beeinträchtigt ...

Ich habe herausgefunden, "Warteschlange" -Modul, aber ich weiß nicht, wie Sie es mit meinem Fall anwenden (get_followers).

Bitte helfen! Danke allen.

Antwort

0

Wenn es so lange dauert, wird die Client-Anforderung Timeout. Sie müssen eine Status-/Ergebnisroute hinzufügen, die der Client abfragen kann.

Ich empfehle auch, ein separates Modul für checkusername getfollowers usw. zu erstellen, die die Statusroute aufrufen kann. Und mit async/await und Pfeil-Syntax wird Code sauberer machen.

+0

Client muss nicht folgen, nur ich im Backend möchte wissen. get_followers Func run Hintergrund und ich werde es durch Konsole oder irgendetwas folgen. –

Verwandte Themen