【发布时间】:2017-02-24 04:05:42
【问题描述】:
我正在使用Robinhood-node API 来检索我的安全投资组合。 API 有两个我使用的函数 -
orders(callbackfn)
检索最后 100 个订单和下一页的链接。
url(url,callback)
获取具有 100 多个订单的下一页。
这两个函数都返回一个类似于 -
的 JSON{
results:[
{order 0},
{order -1},
...
{order -100}],
next: url_for_next_page
}
现在,我需要将下一个 url 传递给 url 函数以获取另外 100 个订单。最后一页有next: null。
在处理orders 的结果之前,无法调用url。在处理之前的url 结果之前,无法调用后续的 url。这导致我创建了一个回调地狱:-( order -> url -> url -> url ...
我不能循环调用url方法。循环在回调执行之前继续执行。
如何反复拨打url?到目前为止,我已经使用递归函数调用管理了一个 hack。这是我的代码 - https://gist.github.com/lordloh/f5c8c589b4538ab9674db919ae2e2834
我正在学习 node js... :-/
【问题讨论】:
-
是的,递归方法是解决异步遍历的唯一方法。
-
我不应该担心堆栈空间不足吗?特别是因为我不知道我可能需要进行多少次递归。随着时间的推移,我会有更多的交易,递归的次数也会增加。
-
@LordLoh.,这是一个很好的观点。我更新了我的答案以避免这个问题 - 如果你添加一个
setTimeout和0时间,该函数将被添加到事件队列中,并且没有机会耗尽堆栈空间。 -
@LordLoh。 No。您的函数是异步的,回调将使用新堆栈调用。
标签: javascript node.js recursion callback