我正在为 reddit 编写一个网络爬虫,它每 2 秒只允许 1 个请求,并且想使用递归来发出请求。在对 1 人评论的一系列获取请求完成后,我想发出以显示完成并在消息队列中的下一个用户名上再次调用评论。问题是每当我超过一层深度时,我都会收到“TypeError: Object # has no method 'emit'”。
我也愿意寻求更好的方法来做到这一点,我刚刚开始学习 Node ,并且确信有更好的方法来实现这一点。
我已经在下面的要点中发布了我的代码...任何帮助都会很棒!
最佳答案
问题出在 this
上,它是一个关键字(不是自由变量),计算结果为函数调用的“接收者”。
例如,给定:
x = {fn: function () {return this} }
x.fn()
然后在 fn
中,this
计算出 x
计算出的结果(因此 x.fn() === x
)。在代码中 grabComments
被调用时没有 接收器,在这种情况下 this
恢复为全局对象。您可能对 Function.call/apply
感兴趣,或者只是简化代码以使用 nested 函数处理递归,以便 self
可以保持绑定(bind)-在范围内。
(在 JavaScript 中,方法未绑定(bind)到对象:它们只是被插入属性的函数,因此接收器在确定this
用于 executiong 函数。)
另见:
- > jQuery/JavaScript "this" pointer confusion
- > In Javascript, why is the "this" operator inconsistent?
- > Javascript "this" variable confusion
- > How do JavaScript closures work?
快乐编码。
关于javascript - 函数递归调用自身时,是什么导致 "no method"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9126177/