2016-11-01 46 views
0

我在Rails上,我在一个cron工作中使用考拉来导入所有评论Facebook。包含API请求的循环是否需要回调?

可以使用for循环,每次我做一个request并存储response?或者在我得到之前重新启动for的风险都会被搞砸了吗?

换句话说:循环等待响应还是需要回调函数?

这里是循环:

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

考拉的get_object调用是同步的,所以执行将暂停,直到结果准备好将不会返回到您的代码。 (除非它失败,在这种情况下考拉提出错误)。

所以,是这样使用的安全! for循环将不会继续,直到前一个调用的结果准备就绪。无需回传!

(我正在基于Koala wiki中的例子)。

+0

我一直在运行代码,目前没有问题,所以我想你是对的 –