2012-08-16 69 views
0

我不断调用一个API并在调用几分钟内不断获得堆栈级别太深的错误。我想我在这里缺少一些基本的东西:在递归调用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 

回答

0

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

+0

所以这是计算机一直错误的情况。谢谢! – Stpn 2012-08-16 02:40:02

相关问题