NodeJS:如何使用process.nextTick将参数传递给函数

lee*_*ech 7 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?
Run Code Online (Sandbox Code Playgroud)

这就是我尝试过的:

var big = html.get(url);
process.nextTick(function() {callback(big)}); // this seems wrong to me.
big = null;
Run Code Online (Sandbox Code Playgroud)

Mal*_*lio 12

var big = html.get(url);
process.nextTick(function() {callback(big); big = null; }); 
Run Code Online (Sandbox Code Playgroud)

如果这种风格对您来说不明显,那么您应该更多地学习闭包.

(顺便说一句,在这里可能不需要将big设置为null;一旦回调完成,big就超出了范围.)

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

const big = html.get(url);
process.nextTick(() => callback(big)); 
Run Code Online (Sandbox Code Playgroud)


Ben*_*kin 12

process.nextTick()不支持像setTimeout()那样传递参数.您只需要创建一个传递参数的函数.

所以代替:

setTimeout(myfunc, 0, 'arg1', 'arg2')
Run Code Online (Sandbox Code Playgroud)

用这个:

process.nextTick(function() { myfunc('arg1', 'arg2') })
Run Code Online (Sandbox Code Playgroud)

您还可以使用函数来构建函数.

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

  • 哇,这是一个有点记载的功能!顺便说一句,在我的浏览器和我的Node安装上,它是`setTimeout(myfunc,0,arg1,arg2)`(即没有列表和没有引号.无论哪种方式,最好使用闭包同时使用nextTick和setTimeout. (2认同)