2013-06-21 33 views
8

Bir API çağrısı sonuçların bir sonraki 'sayfasını' döndürür. Bu sonuç geri çağırma konusunda nasıl başarılı olurum?node.js'de API geri çağrıları üzerinden eşzamansız olarak nasıl tekrarlanır?

var url = 'https://graph.facebook.com/me/?fields=posts&since=' + moment(postFromDate).format('YYYY-MM-DD') + '&access_token=' + User.accessToken; 
request.get({ 
    url: url, 
    json: true 
}, function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
     _.each(body.posts.data, function (post) { 
      User.posts.push(post); //push some result 
     }); 
     if (body.pagination.next) { // if set, this is the next URL to query 
      //????????? 
     } 
    } else { 
     console.log(error); 
     throw error; 
    } 

}); 

cevap

17

Bir işlevde çağrıyı sarma önermek ve gerekli dek sadece demeye devam ediyorum: Burada

bunu yapmak gereken yere bir örnektir.

Ayrıca, işlemin ne zaman biteceğini bilmek için bir geri arama da eklerim.

function getFacebookData(url, callback) { 

    request.get({ 
     url: url, 
     json: true 
    }, function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
      _.each(body.posts.data, function (post) { 
       User.posts.push(post); //push some result 
      }); 
      if (body.pagination.next) { // if set, this is the next URL to query 
       getFacebookData(body.pagination.next, callback); 
      } else { 
       callback(); //Call when we are finished 
      } 
     } else { 
      console.log(error); 
      throw error; 
     } 

    }); 
} 

var url = 'https://graph.facebook.com/me/?fields=posts&since=' + 
    moment(postFromDate).format('YYYY-MM-DD') + '&access_token=' + User.accessToken; 

getFacebookData(url, function() { 
    console.log('We are done'); 
}); 
+0

Kusursuz - teşekkürler. Şimdi çok açık. Tesadüfen - Bu durumda getFacebookData() vs var getFacebookData = function() işlevini kullanmam için bir neden var mı? – metalaureate

+1

Zor bir sebep yok sadece yumuşak olanlar ve bunlar - Öncelikle benim için bir fonksiyonu tanımlamanın daha doğal bir yolu, ikinci olarak “var” unu unutursanız, o zaman küresel bir işlev haline gelir. Ve üçüncü ve en kullanışlı - bu şekilde ilan edildiyse, işlev anonim olmak yerine bir ada sahip olacaktır. Bunun kullanımları var. Ve bunların en basit olanı - yığın izinde görünecektir. – DeadAlready

İlgili konular