递归调用API时,继续使Stack级别过深

时间:2012-08-16 01:34:29

标签: ruby-on-rails recursion stack-overflow

我一直在调用一个API,并且在通话几分钟内不断出现堆栈级错误。我想我错过了一些基本的东西:

Class SomeModel

  def self.call_api(index)
    ref = SomeModel.get_reference
    query ||=  Api.call(:parameter => ref.parameter, :offset => index)
    # .. doing stuff
    if index >= 949
      sleep(20)
      new_num = Integer(number) + 1000
      ref.update_attribute(:parameter, new_num)      
      SomeModel.call_api(1)
     else
       sleep(10)
       begin
             # This is a rescue for the case when API call returns nothing.
         SomeModel.call_api(index+50)
       rescue
         new_num = Integer(number) + 1000
         ref.update_attribute(:parameter, new_num)
         SomeModel.call_api(1)
       end
    end
  end

end

1 个答案:

答案 0 :(得分:0)

Ruby不能很好地处理递归,并且最终会给你一个太深的堆栈级别。你最好把它放在某种不会递归调用方法的循环中。如果你想让它比在无限循环中调用方法更聪明,你可以使用类似EventMachine的东西来响应不同的事件。