2016-11-01 3 views
0

Я нахожусь на Rails, и я использую Koala в задании cron, чтобы импортировать все комментарии Facebook.Требуется ли обратная связь для циклов, содержащих запросы API?

Можно ли использовать цикл for, где каждый раз, когда я делаю request и храните response? Или существует риск, по которому перезапуск for до того, как я получу response из Facebook, все запуталось?

Другими словами: Ожидает ли цикл ответ или мне нужна функция обратного вызова?

Вот петля: get_object вызов

def self.import_comments 
    # Access Facebook API 
    facebook = Feed.get_facebook_access 

    # Run 190 queries per cron job 
    for i in 1..190 

     id_of_latest_feed   = Feed.get_latest['fb_id'] 
     id_of_latest_feed_checked = Option.get_feed_needle 

     # Check if there are more recent feeds than the latest checked 
     if id_of_latest_feed != id_of_latest_feed_checked 
      # Get the facebook id of the feed which comes after the latest checked 
      latest_feed_checked = Feed.where(fb_id: id_of_latest_feed_checked).first 
      this_date   = latest_feed_checked['fb_updated_time'] 
      feed_to_check  = Feed.get_older_than(this_date) 

      unless feed_to_check.nil? 
       # Get the ID of the feed to check 
       fb_id = feed_to_check['fb_id'] 
       # Update needle 
       Option.update_feed_needle_to(fb_id) 

       # -------- REQUEST! --------- # 
       # Get comments from Facebook 
       @comments = facebook.get_object("#{ fb_id }/comments?filter=stream") 

       # Save each comment 
       @comments.each do |comment| 
        if Comment.exists?(fb_id: comment['id']) 
         # don't do anyhting 
        else 
         # save the comment 
        end 
       end 
      end 
     end 
    end 
end 

ответ

0

Коала является синхронным, поэтому выполнение остановится и не вернется в свой код, пока результат не будет готов. (Если это не удастся, в этом случае Koala вызывает ошибку).

Так что да, безопасно использовать это! Цикл for не будет продолжаться до тех пор, пока результат предыдущего вызова не будет готов. Никаких обратных вызовов не требуется!

(Я основываю это на примерах в Koala wiki).

+0

Я запускал код и не испытывал никаких проблем до сих пор, поэтому, я думаю, вы правы –