NodeJS:具有asynchronous请求的recursion函数

我试图从2callback传递2结果到1 lodash函数(_.union) 使用recursion函数 。 我不明白我做错了什么! 我一直在“未定义”。 这是我的代码:

  • 编辑:

我的新的代码与“承诺”技术

第一个函数检查远程DB-

function findFiles(kw, callback){ if (_.isArray(kw)) {return callback(kw)}; return new Promise((resolve, reject) => { console.log(kw); word.aggregate([ { $match: { keyWord: kw } }, { $project: { filesFound: '$filesFound.fileName' , '_id':0} }, { $sort: { fileName: 1 } } ],function(err, obj){ console.log('checked' + kw); console.log(obj); if (err) return reject(err); else return resolve(obj[0].filesFound);//obj[0].filesFound }) }) } 

主要function:

  function searchOperation(query, callback){ var stack=[]; if (!(_.includes(query, 'OR')) && !(_.includes(query, 'AND')) && !(_.includes(query, 'NOT'))){ findFiles(query) .then((item) => { console.log(item+'********'); callback(item) }) .catch((err) => { console.log(err) }) } else{ wordsArr = _.split(query, " "); console.log("+++++:" + wordsArr); wordsArr.forEach(function(w){ console.log('first check:'+w); if(_.isEmpty(stack)){ if(_.includes(w, 'OR')){ console.log('found OR'); var statement = []; console.log('query is:'+query); statement = _.split(query, w, 2); console.log(statement[0]+' , '+statement[1]); return new Promise((resolve, reject)=>{ resolve(_.union(searchOperation(statement[0]),searchOperation(statement[1]))) }) //ANOTHER OPTION: // searchOperation(statement[0],function(arr1){ // console.log('arr1'); // console.log('done part 1!'); // searchOperation(statement[1],function(arr2){ // console.log('who called arr2?'); // return(_.union(arr1,arr2)); // }) // }); } } }) } } 

现在,函数findFile()console.log返回我所需要的。 但是然后我需要在另一个函数(union)中使用两个返回的值,并返回undefined

在主线程中:

 searchOperation('Expression1 OR Expression2', function(result){ res.json(result); }) 

现在我确定:在recursion函数和asynchronous节点中出现错误…

我需要它recursion的工作,并可能会得到复杂的expression式,如:

 '((A NOT B) AND (C OR D))' 

有些人知道用Promiseasync.waterfall编写它的正确方法是什么? 提前致谢!!!

您的代码不起作用,因为您尝试以同步方式获取asynchronous响应。

看看承诺。