Articles of recursion

如何recursion调用asynchronous函数?

我定义了这个函数: // retrieves zip of package manifest supplied var retrieveZip = function(metadataClient, args, callback) { metadataClient.retrieve(args, function(err, result) { metadataClient.checkRetrieveStatus({id: result.result.id, includeZip: 'true'}, function(err, result) { if(result.result.done) { return callback(result); } // else check again!(how??) }); }); } retrieveZip(metadataClient, args, function(result) { console.log(result); }); 这个想法是,客户端将尝试根据args中提供的元数据检索一个zip文件。 API文档(Salesforce SOAP API)要求将retireve方法的结果中提供的id传递到检查状态函数中。 然而这个问题是这样的: 在第一次检查,如果结果是“完成”,那么只需从checkRetreiveStatus (包含结果)返回结果对象的callback, 但如果结果没有完成,我需要再次调用checkRetrieveStatus …从checkRetreiveStatus 天真的做法是将参数从原始的checkRetreiveStatus调用传递到checkRetreiveStatus的新实例,但显然不可能知道这将被调用多less次。 这听起来像我需要一个recursion的解决scheme呢? […]

在nodejs中的dynamodb中进行扫描的recursion函数

所以我需要一个nodejs中的recursion函数来replace这个函数调用: docClient.scan(params, callback) http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs.04.html

使用Underscore / Lodash在JavaScript中完成一个非变异反向拖尾的最佳方法

我是我的node.js项目lodash /下划线的狂热用户,我发现自己的情况下,我需要以类似于下面的代码的方式从右到左recursion遍历数组(假设所有调用是同步的): function makeDir(pathArray) { var unsulliedPath = clone(pathArray); var lastGuy = pathArray.pop(); var restOfEm = pathArray; if dirExists(unsulliedPath) { console.log("Your job is done!"); } else { makeDir(restOfEm); makeDir(unsulliedPath); } } 然而,克隆和改变pathArray参数会让我感到困惑。 所以我可以这样做: function makeDir(pathArray) { var lastGuy = _.last(pathArray); // EITHER I could… var restOfEm = _(pathArray).reverse().tail().reverse().value(); // OR I could do… var restOfEm […]

如何在NodeJS中testingrecursion调用的函数?

我有一个ES6 / 7编写的反复函数,由babel转换。 我有一个循环函数创build,检查是否有用户文件,使用mongoose。 // Keep checking if there is a user, if there is let execution continue export async function checkIfUserExists(){ let user = await User.findOneAsync({}); // if there is no user delay one minute and check again if(user === null){ await delay(1000 * 60 * 1) return checkIfUserExists() } else { // otherwise, […]

recursion调用node.js中的asynchronous函数

我写了一个recursion查询来以数据库级别或分层方式更新数据。 我写了这个代码: let updateInvitationRewards = function(parent, level, callback) { Service.customer.getOneCustomer({ _id: parent }, {}, {}, function(err, data) { console.log(data.email); level–; if (data.parent) { parent = data.parent.id; } else if (level == 0 || data.parent == null) callback("end"); updateInvitationRewards(parent, level–, callback); }); }; updateInvitationRewards(parent, level, function(string) { console.log(string); cb(); }); 这个查询是这样的错误: Error: Callback was already called. […]

recursion函数的callback

以下代码用于从我们的Web应用程序获取.zip文件。 该文件是通过安全地closures另一个应用程序然后进行压缩生成的,最后发送下载。 var dl = function() { request({ method: 'GET', uri: 'some_url', headers: { 'User-Agent': 'Scripted-Download' }, encoding: null, jar: true }, function(err, res, body) { if (err) throw(err) if (res.headers['content-type'] === 'application/zip;charset=utf-8') { process.stdout.write('\rDownloading file ..') var id = uuid.v4() , file = path.resolve(__dirname, '../../' + id + '.zip') fs.writeFile(file, body, function(err) { if […]

如何用MongoDBrecursion查询树结构?

例如一个树形结构如; [ {id: 1 , childrenIdList: [2, 3]}, {id: 2 , childrenIdList: [4, 5]}, {id: 3 , childrenIdList: []}, {id: 4 , childrenIdList: [6, 7]}, {id: 5 , childrenIdList: []}, {id: 6 , childrenIdList: []}, {id: 7 , childrenIdList: []} ] 这就像 1 2 3 4 5 6 7 我如何追踪树从开始叶节点(id = 7)到根(id = 1)? findid=7的父母很容易; […]

如何用MongoDB构buildrecursion结构

我试图做一些通常简单的SQL(例如,在同一个表中的外键)(这可能是与MongoDB一样简单,我只是不知道),这是build立一个recursion数据结构。 在这个例子中,我将讨论网站中的页面。 我想做一个多层次的页面结构。 所以可能有: 家 我们的产品 产品1 产品2 关于我们 我们在哪? 联系我们 比方说,网页将有一个标题和一个内容。 我需要知道什么是最好的方法来做到这一点,也是我可以build立一个基于该数据结构(显示每个级别的每个页面的页面)的网站地图。 我正在为MongoDB构build一个node.js应用程序。 编辑:它不会通过简单地引用每页中的父页面工作? 页面会像{ title: 'test', content: 'hello world', parentPage: ObjectID(parent page) } 谢谢您的帮助!

在JavaScript中asynchronous迭代大量数组,而不会触发超出的堆栈大小

我的环境是NodeJS,尽pipe这也可能是Web相关的问题。 我有一个数据库的大量数据,我试图枚举。 然而,为了争论让我说,我有一个20000string的数组: var y = 'strstrstrstrstrstrstrstrstrstr'; var x = []; for(var i = 0; i < 20000; i++) x.push(y); 我想枚举这个列表asynchronous,可以说使用asynchronous库 ,并可以说,因为我超级谨慎,我甚至一次限制我的枚举5次迭代: var allDone = function() { console.log('done!') }; require('async').eachLimit(x, 5, function(item, cb){ … someAsyncCall(.., cb); }, allDone); 期望的是5个x的项目将在上面同时迭代,并且最终所有20,000个项目将被迭代,并且控制台将打印“完成!”。 实际发生的是: Uncaught exception: [RangeError: Maximum call stack size exceeded] 在这一点上,我认为这一定是asynchronous库的一种错误,所以我写了自己的eachLimit版本,如下所示: function eachLimit(data, limit, iterator, cb) { […]

使用PhantomJS将多个页面渲染为pdf文件

我需要使用PhantomJS将多个页面渲染成pdf文件。 一旦PhantomJS渲染一个页面,另一个实例不能被调用,直到完成前一个执行。 我相信它将需要一些types的callback和recursion方法。 以下是呈现单个页面的代码: someUrl = "https://www.google.com/"; var phantom = require('phantom'); phantom.create(function(ph){ ph.createPage(function(page) { page.open(someUrl, function(){ page.render('google.pdf'); //needs to wait for this to finish ph.exit(); //to call itself for the next url }); }); });