Node.js NodeJS:如何使用process.nextTick向函数传递参数

Node.js NodeJS:如何使用process.nextTick向函数传递参数,node.js,Node.js,我正在尝试制作一个网络爬虫,从某些网站获取产品,以减少内存使用(我在某个地方没有发现内存泄漏)。因此,我尝试将参数异步发送到回调,以终止当前上下文 这就是我所处的位置: var big = html.get(url); callback(big); big = null; // this isn't going to get erased until after big is done is it? 这就是我尝试过的: var big = html.get(url); process.next

我正在尝试制作一个网络爬虫,从某些网站获取产品,以减少内存使用(我在某个地方没有发现内存泄漏)。因此,我尝试将参数异步发送到回调,以终止当前上下文

这就是我所处的位置:

var big = html.get(url);
callback(big);
big = null; // this isn't going to get erased until after big is done is it?
这就是我尝试过的:

var big = html.get(url);
process.nextTick(function() {callback(big)}); // this seems wrong to me.
big = null;
如果这种风格对你来说不明显,那么你应该多学习

(顺便说一句,此处可能不需要将big设置为null;回调完成后,big将超出范围。)

编辑:为了纪念这个问题六周年,这里有一个ECMA-6版本的问题:

const big = html.get(url);
process.nextTick(() => callback(big)); 
您只需要创建一个传递参数的函数

因此,不是:

setTimeout(myfunc, 0, 'arg1', 'arg2')
使用以下命令:

process.nextTick(function() { myfunc('arg1', 'arg2') })
还可以使用函数来构建函数

最后,setTimeout不支持指定调用函数的对象,因此它的用处有限。

尽管process.nextTick()不直接支持传递参数,但有一种快捷方式可以实现同样的效果

var big = html.get(url);
process.nextTick(callback.bind(null, big));
请注意,这在功能上与已经给出的显式闭包答案没有任何不同(减去手动设置
big=null;
,而不是让它自己超出范围),但我觉得这使代码更易于阅读

bind();阅读更多(包括一些例子)在


详细信息:
bind()
的第一个参数是执行
callback()
期间将分配给
的值,此处分配给
null
,因为在这种情况下它看起来不会被使用。任何附加参数(在本例中仅为
big
)将作为参数传递给
callback
,稍后通过一种称为“部分函数应用程序”的技术进行调用。

在使用完big之前,您无法“擦除”它。如果您不想将其存储在内存中,您可以将其写入磁盘以便稍后处理,但如果它只需要一个CPU周期,那么这就没有意义了(磁盘IO非常慢)。你可能需要在“回调”中给出一个合适的答案,它是一个抓取页面并查找特定信息的爬虫程序,比如商店页面上的产品。所以它递归地跟踪链接并获取有用的信息。哇,这是一个有文档记录的小功能!顺便说一句,在我的浏览器和我的节点安装中,它是
setTimeout(myfunc,0,arg1,arg2)
(也就是说,没有列表和引号。无论哪种方式,最好对nextTick和setTimeout都使用闭包。哦。谢谢你指出这一点。我被方括号表示它们是可选的弄糊涂了。我以为它们表示这是一个数组。
var big = html.get(url);
process.nextTick(callback.bind(null, big));