NodeJS:如何使用process.nextTick将parameter passing给函数

我试图让一个networking抓取工具从某些网站获取产品,以减less我的内存使用情况(我有一个内存泄漏的地方,我没有find)。 所以我试图发送参数asynchronouscallback,以终止当前的上下文。

这是我在哪里:

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; 

 var big = html.get(url); process.nextTick(function() {callback(big); big = null; }); 

如果这种风格对你来说并不明显,那么你应该更多地研究闭包 。

(顺便说一句,在这里大概设置为null可能是不必要的;一旦callback完成,大的就会超出范围。)

编辑:为了纪念这个问题六周年,这里是一个ECMA-6版本的同样的事情:

 const big = html.get(url); process.nextTick(() => callback(big)); 

process.nextTick()不支持像setTimeout()那样的传递参数。 你只需要做一个传递参数的函数。

所以,而不是:

 setTimeout(myfunc, 0, 'arg1', 'arg2') 

用这个:

 process.nextTick(function() { myfunc('arg1', 'arg2') }) 

你也可以使用一个函数来build立你的function。

最后,setTimeout不支持指定函数被调用的对象,所以它的用处是有限的。

虽然process.nextTick()不直接支持传递参数,但是有一个快捷方式可以达到同样的效果。

 var big = html.get(url); process.nextTick(callback.bind(null, big)); 

请注意,这与已经给出的明确的闭包答案在function上没有任何区别(减去手动设置big = null;而不是让它自己超出范围),但是我觉得它使代码更容易阅读。

bind()实际上是一个比这里显示的更强大的工具; 在MDN文档中阅读更多(包括一些示例)。

详细信息: bind()的第一个参数是在执行callback()过程中分配给它的null ,因为在这种情况下它看起来不会被使用,所以在这里分配给null 。 任何额外的参数(在这种情况下只有big参数)将作为parameter passing给稍后callback函数,通过称为“部分函数应用程序”的技术。