我正在点击返回分页JSON响应的HTTP端点。 ' meta.next'的价值 在我的响应类型中指向响应的下一页。当此值为null时,不再有页面 检索。 我使用Spray IO发出HTTP请求。我收集每个感兴趣的条目 页面响应并将其与目前收集的内容连接起来。当下一个成为 null,我返回所有收集的条目。 我的问题:有没有办法制作“getJson(...)'函数低于尾递归?
AudioFile
答案 0 :(得分:3)
尾递归在这里并不适用。当您使用未来的组合器时,您不会在单个堆栈上运行。
具体而言,getJson
会立即返回。通过使用jsr.flatMap
,您正在注册一个回调,只有在收到HTTP请求的响应时才会调用该回调。因此,getJson
的下一次调用也将在此上下文中发生,即在隐式执行上下文提供的回调堆栈上。
因此,虽然递归仍然在算法级别上发生,但它并不会导致在一个(或任何)线程的堆栈上添加堆栈帧。
关于吹栈,你的代码很好。还有其他原因要使用尾递归吗?