在nodejs中,asynchronousrecursion意味着什么

在Mongoose的validation文档中,他们说“ validation是asynchronousrecursion的:当你调用Model#save时,子文档validation被执行。如果发生错误,你的Model#保存callback会收到它

这是什么意思? 假设我有5个validation,比他们将并行或系列运行? 或者,他们是通过模型保存方法接收的callback串联调用的? 请帮我理解这个? 我知道这是一个非常简单的问题,但我无法从search和所有的帮助。 所以,请。

这意味着,尽pipe事实上你有多个事件触发“同时”,每个方法保持它自己的状态,并且它是为每个请求和每个步骤分别自己的error handling步骤。

考虑这个例子,我们需要磁盘信息来初始化一个数据库查询。 每个连续的步骤都是一个asynchronous操作,即调用callback。

function dataBaseQuerys(someQuerys) { function queryDatabase(someQuery) { if(someQuery === undefined) return; fs.readFile('someFile', function (err, data) { 'use strict'; var myQuery = someQuery + data; query(myQuery, function (err, qData) { doSomethingWithTheQuery(qData); queryDatabase(someQuerys.pop());//Recursion(behaves iteratively, but with async calls! No for loop necessary) }); }); } queryDatabase(someQuerys.pop()); } 

现在考虑下面的例子,我们没有利用asynchronousrecursion。

 function dataBaseQuerys(someQuerys) { for(var i = 0; i < someQuerys.size; i++) { var fileData = fs.readFileSync('someFile'); var myQuery = someQuerys[i] + fileData; doSomethingWithTheQuery(querySync(myQuery));//Finding a DB module that does a "querySync" is probably not possible, but assume it is. } } 

这两个例子做同样的事情。 迭代的error handling更加困难,而javascript中的try / catch是不好的,因为它不允许优化。 recursion的,语法对于获得“nextQuery”对象的闭包数据有点棘手,但是它不会阻塞事件循环,这对性能是无价的。 所有的开发者告诉你,他们使用第一个例子。

编辑:我要在这里举行一点,回答你的要点,因为它们涉及到这些例子:

这是什么意思? 老实说,在这里不能更具体…我的例子明确地概述了他们使用的习惯用法。

假设我有5个validation,比他们将并行或系列运行? 他们将以asynchronous方式串联运行。 这是“recursion”的要点。 代码中的每个点都保证按顺序运行,但其他事情可能发生在后台,而不是涉及查询正在执行的任何callback序列的事情。

或者,他们是通过模型保存方法接收的callback串联调用的? -是

请帮我理解这个? – 如果这没有帮助,你需要问一个更具体的问题。 另外,如果你没有看到我在例子中列出的逻辑如何涵盖所有这些问题,那么你应该花更多的时间来围绕asynchronous的“基于事件的callback”。 如果你习惯了C风格的逻辑stream程,可能很难把你的头围绕起来,我曾经去过那里,希望当时有人会告诉我相同的东西。