Tag: recursion

在javascript中使用asynchronouscallback模式的无限循环

假设我想发送一个asynchronousAJAX请求到服务器,当它响应发送另一个请求,并永远重复: function sendXHR(url, callback) { // Send XMLHttpRequest to server and call callback when response is received } function infinite() { sendXHR('url/path', infinite); } infinite(); 我假设在这里我们会很快耗尽堆栈空间,所以我怎样才能做到这一点(没有阻塞)? 传递callback而不是使用return的模式在node.js特别stream行。 人们如何创造无限循环? 我不相信大多数JS引擎做任何forms的尾部呼叫优化。

使用async.js进行asynchronous树遍历

我试图使用async.js遍历一个嵌套的项目树。 遍历一个分支后,遍历终止。 var count=0; exports.buildFamily = function(item_id, mback){ var extendedFamily={}; exports.getItembyId(item_id, function(err, item){ extendedFamily=item; if(item.descendants){ extendedFamily.kids=[]; count=+item.descendants.length; console.log('outercount ' + count); async.eachSeries(item.descendants, function(item){ count– console.log('item: ' + item) exports.buildFamily(item, function(err, family){ console.log('deepcount: ' + count); extendedFamily.kids.push(family); if(count===0){ return mback(null, extendedFamily);} else {extendedFamily.kids.push(family);} }) }) } else{ if(count===0){ return mback(null, extendedFamily);} else{ extendedFamily.kids.push(family); return; } } […]

理解node.js中recursion函数的承诺

我试图使用recursion调用从redis中获取数据,当成员返回null时停止并返回。 所以我的数据是这样添加的: SADD parents.<name> <parent1> <parent2> SADD parents.<parent1> <grandparent1> <grandparent2> … 最终的数据应该如下所示: [ { label: <name>, parents: [ { label: <parent1>, parents: [ {label: <grandparent1>}, {label: <grandparent2> }] }, { label: <parent2> } ] } ] 这里是我搞乱的代码(来自不同来源的拼凑在一起),但我不知道我在做什么。 不知道这个代码是否有用,我可能会偏离轨道。 var redis = require('node-redis'); var r_client = redis.createClient(); var Q = require('q'); function getFromRedis(nodeName){ var ret = […]

在Nodejs中pipe理大量的callbackrecursion

在Nodejs中,几乎没有阻塞的I / O操作。 这意味着几乎所有的nodejs IO代码都涉及很多callback。 这适用于从数据库,文件,进程等读写数据,这是一个典型的例子: var useFile = function(filename,callback){ posix.stat(filename).addCallback(function (stats) { posix.open(filename, process.O_RDONLY, 0666).addCallback(function (fd) { posix.read(fd, stats.size, 0).addCallback(function(contents){ callback(contents); }); }); }); }; … useFile("test.data",function(data){ // use data.. }); 我期待写代码将做许多 IO操作,所以我期望写很多callback。 我很喜欢使用callback,但我担心所有的recursion。 我是否有陷入过度recursion的危险,并在某个地方吹过堆栈? 如果我用成千上万的callback函数向我的键值存储进行数千次单独写入,我的程序是否会最终崩溃? 我是误解还是低估了影响? 如果没有,有没有办法解决这个问题,同时仍然使用Nodejs的callback编码风格?

在Javascript中获取文件夹和文件列表的最佳方式

我正在使用node-webkit,并试图让用户select一个文件夹,然后我将返回该文件夹的目录结构并recursion获取其子项。 我已经很简单的使用这个代码(在一个Angular Controller中)。 var fs = require('fs'); $ scope.explorer = []; $ scope.openFile = function(){ $ scope.explorer = [tree_entry($ scope.path)]; get_folder($ scope.path,$ scope.explorer [0] .children); }; 函数get_folder(path,树){ fs.readdir(path,function(err,files){ (err)return console.log(err); files.forEach(function(file,idx){ tree.push(tree_entry(文件)); fs.lstat(path+ '/' +文件,function(ERR,统计数据){ (err)return console.log(err); 如果(stats.isDirectory()){ get_folder(path+ '/' +文件,树[IDX]。儿童); } }); }); }); 的console.log($ scope.explorer); 返回; } 函数tree_entry(entry){ return {label:entry,children:[]} } 以一个中等大小的文件夹与22个子文件夹和大约4级深,需要几分钟来获得整个目录结构。 有什么我明显做错了吗? […]