包含API请求的循环是否需要回调?

时间:2016-11-01 11:41:27

标签: ruby-on-rails facebook ruby-on-rails-5 koala

我在Rails上,我在一个cron工作中使用Koala来导入所有评论Facebook。

每次制作for并存储request时,是否可以使用response循环?或者,在我从Facebook获得for之前response重新启动的风险全都搞砸了?

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

这是循环:

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

1 个答案:

答案 0 :(得分:0)

Koala的get_object调用是同步的,因此执行将暂停并且不会返回到您的代码,直到结果准备就绪。 (除非它失败,在这种情况下,考拉会引发错误)。

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

(我基于Koala wiki中的示例)。