在我正在编写的node.js应用程序中,我想在CSV文件中迭代X行,将它们转换为JSON对象并将这些行(作为X对象的批处理)发送到CouchDB的_bulk_docs
端点。
为此,我使用生成器函数来公开迭代器,然后通过递归实现迭代器(因为其中一个步骤涉及异步执行的HTTP请求)。如果我在递归函数中声明变量,那么在递归迭代完成之前是否会对这些变量进行垃圾收集?即使用以下代码:
var vals = // call generator function;
(function doIteration() {
var x = vals.next();
if (!x.done) {
doAsyncFunction(x, function(res) {
doIteration();
});
};
})();
我认为doIteration()
函数调用完成后无需等待递归堆栈清除。那是对的吗?否则,我应该在函数之外移动x
的声明吗?这似乎会导致重新分配x,这肯定会导致旧的引用值被清理。