Tag: recursion

recursion调用asynchronous函数

我有一个asynchronous函数,我想连续调用多次。 问题是,“多”可能是几十万或几百万… 显而易见的方法是从callback中调用相同的函数: function foo() { asyncBar(foo); } 当然有些逻辑是停止recursion的。 问题是堆栈是否正在填充调用,并可能导致某些点的计算器?

在NodeJS中的尾recursion

所以我最近碰到的情况下,我需要编写的代码,callback调用自己等等,并想知道NodeJS和尾调用支持,所以我发现这个答案https://stackoverflow.com/a/30369729说,是的,它是支持的。 所以我尝试了这个简单的代码: "use strict"; function fac(n){ if(n==1){ console.trace(); return 1; } return n*fac(n-1); } fac(5); 使用Linux x64上的Node 6.9.2并将其作为node tailcall.js –harmony –harmony_tailcalls –use-strict ,结果为: Trace at fac (/home/tailcall.js:4:11) at fac (/home/tailcall.js:7:11) at fac (/home/tailcall.js:7:11) at fac (/home/tailcall.js:7:11) at fac (/home/tailcall.js:7:11) at Object.<anonymous> (/home/tailcall.js:10:1) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) 这清楚地显示了调用堆栈充满了调用,并且不支持尾recursion,虽然我使用了最新的NodeJS。 […]

asynchronous调用和Node.jsrecursion

我正在寻找一个完整的recursion函数,可以继续一个不确定的时间执行callback。 我正在努力解决asynchronous问题,希望能在这里得到一些帮助。 使用request模块的代码如下所示: var start = function(callback) { request.get({ url: 'aaa.com' }, function (error, response, body) { var startingPlace = JSON.parse(body).id; recurse(startingPlace, callback); }); }; var recurse = function(startingPlace, callback) { request.get({ url: 'bbb' }, function(error, response, body) { // store body somewhere outside these funtions // make second request request.get({ url: 'ccc' }, function(error, […]

在Nodejs中recursion地进行处理

[ { name: 'test1', fields: [ { name: 'test11', fields: [ { name: 'test111', fields: [ { name: 'test1111' } ] } ] } ] }, { name: 'test2', fields: [ { name: 'test21' }, { name: 'test22' } ] } ] 我想要在nodejs中recursion地处理上述数组中的字段名称。 由于nodejsasynchronous行为,回路不工作。

与数组对象一起使用

我有一个可以包含相同对象types的子对象的数组,像这样: var exampleArray = [ { alias: 'alias1', children: [ { alias: 'child1' }, { alias: 'child2', children: [ { alias: 'child4' }, { alias: 'child5' } ] }, { alias: 'child3' } ] }, { alias: 'alias2' }, { alias: 'alias3', children: [ { alias: 'child6' }, { alias: 'child7' } ] } ]; […]

javascriptrecursion堆栈溢出

有没有人会解释为什么结果不同下面? // test one function computeMaxCallStackSize() { try { return computeMaxCallStackSize() + 1; } catch (e) { return 1; } } console.log(computeMaxCallStackSize()); 结果是17958 // test two function computeMaxCallStackSize() { try { return 1 + computeMaxCallStackSize(); } catch (e) { return 1; } } console.log(computeMaxCallStackSize()); 结果是15714 当函数“computeMaxCallStackSize”的位置不同时,结果也是不同的。 什么原因? 非常感谢! 运行环境: node.js v6.9.1 OS:Win7

使用promise的asynchronousrecursion

所以我试图把我的代码转移到“承诺世界”,并在许多地方,当我不得不与asynchronousfunction“循环” – 我只是用这种方式recursion function doRecursion(idx,callback){ if(idx < someArray.length){ doAsync(function(){ doRecursion(++idx,callback) }); }else{ callback('done!') } } doRecursion(0,function(msg){ //… }); 现在我正在努力把变化变成承诺的世界,而且我很困难 var Promise = require('bluebird') function doRecursion(idx){ return new Promise(function(resolve){ if(idx < someArray.length){ doAsync(function(){ //… doRecursion(++idx) // how do i call doRecusion here…. }); }else{ resolve('done!') } }); } doRecursion(0).then(function(msg){ //… }); 谢谢。

nodejs中有限的函数调用同一个操作?

我目前正在进行一些科学计算,对于这些计算,只要至less有一个参数是错误的,我的基计算循环就会一遍又一遍地执行recursion调用。 目前我的nodejs服务器停止在大约905-915recursion函数调用。 奇怪的是,它不会崩溃,也不会输出任何错误。 它只是停止做任何事情 – >没有更多的日志等 这是从节点的一些保护行为,以避免溢出? 现在我正在为此苦苦挣扎几周,同时试图用尽可能智能的软件来限制“循环”。 感谢您的帮助和build议。 问候Noa。 根据要求,我提供了一些我的实际代码的抽象 我希望这有帮助。 我不能把我原来的代码放在这里,因为它包含了超过1.5万行 – 很多东西需要检查。 但是下面的例子涵盖了recursion调用背后的基本逻辑。 // Contains objects which contain an array // which represents the amount of the ex_obj terms var amount = { a:[10,10], b:[7.5,7.5], c:[2.5,2.5,2.5,2.5] } // Contains objects, which contain an array of other objects // that represent some selection […]

在使用节点JS的DynamoDB查询中recursion提取所有项目

这可能是一个比DynamoDB特定问题更多的JS / Async问题 – 我想用Amazon的DynamoDB中的散列键获取表中的所有项目。 表中也有Range键。 我正在使用一个NodeJS库,它是AWS DynamoDB REST API的包装器。 – 节点 – DynamoDB DynamoDB只会为每个查询返回1 MB的结果。 要提取结果提醒,它包括lastEvaluatedKey 。 我们可以在另一个查询中包含这个来获取另一个1 MB值的结果,等等… 我在编写recursionasynchronous函数时遇到了困难,它应该按顺序打到服务,直到我可以得到所有结果为止。 (表格永远不会超过10 MB用于我的用例,没有失控查询的机会) 一些伪代码的插图: ddb.query('products', primarykey, {}, function(err,result){ //check err if(result && result.lastEvaluatedKey){ //run the query again var tempSet = result.items; //temporarily store result.items so we can continue and fetch remaining items. } else{ var […]

无法在节点v6.4.0中启用尾部呼叫优化

我不想在节点/ es2015中进行尾部调用优化,但是我一直得到RangeError: Maximum call stack size exceeded 。 所以我尝试了一个非常简单的testing函数: function countTo(n, acc) { if(n === 0) { return acc; } return countTo(n – 1, acc + n); } console.log(countTo(100000 , 0)) 它仍然失败。 我试过添加'use strict'; 在函数体内部和文件的顶部。 我试过使用–harmony和–harmony-tailcalls 球拍中的function与预期相同: #lang racket (define count-to (lambda (n acc) (cond ((= n 0) acc) (else (count-to (- n 1) (+ […]