我使用的技术是Node.js,express和MongoDB。
我有一个名为' getAllRecipes'查询数据库的所有食谱 - 这很好。
在' getAllRecipes'回调方法,然后循环每个条目/配方,以获得它的注释和注释。循环内的任务放在一个封闭内,以模仿“让”。否则每个recipeID都是一样的。
现在我添加了对数组的进一步调用,以便与' async.series'一起使用。 首先,我打电话给“getRecipeNotes'”,当它返回时,我打电话给“getRecipeComments”'在' getRecipeNotes'回调方法。
最终输出显示以下内容:
[
{
"_id": "56d070ac7c3965e85d3ebd38",
"userID": "56cf383a1f8303082484f35f",
"name": "Chocolate cake",
"instructions": "Add mixture to bowl, and then mix",
"dateTimeSubmitted": "2016-02-26T15:35:08.868Z",
"tags": "cooking, cake, chocolate",
"active": 1,
"notes": [],
"comments": []
},
{
"_id": "56d070ac7c3965e85d3ebd3a",
"name": "num1",
"quantity": "5",
"notes": [],
"comments": []
}, ...]
每一个'笔记'以及每一条评论'是空数组。
我已经检查了评论集合,并且有一个针对recipeID的条目:" 56d070ac7c3965e85d3ebd38"。
如果我修改了' getRecipeComments'返回每个食谱的所有评论的方法,然后返回所有评论。
此外,如果我使用recipeID保留查询并使用recipeID在&#34; 56d070ac7c3965e85d3ebd38&#34;之外的getAllRecipes方法之外进行调用,那么它也会返回正确的数据..只是不使用getAllRecipes方法。< / p>
getAllRecipes:
function getAllRecipes( db, callback )
{
//query( db, {}, 'recipes', callback );
query( db, {}, 'recipes', function( err, recipeData )
{
tempArray = recipeData.slice();
if( err || !tempArray.length )
callback( err );
else
{
var taskArr = [];
for( var i=0; i < tempArray.length; i++ )
{
(function()
{
var tID = tempArray[ i ]._id;
taskArr.push( function( iCallback )
{
getRecipeNotes( db, tID, function( err2, noteData )
{
getRecipeComments( db, tID, function( err3, commentData )
{
if( err2 )
{
iCallback( err2 );
return;
}
if( err3 )
{
iCallback( err3 );
return;
}
for( var j=0; j < tempArray.length; j++ )
{
if( tempArray[ j ]._id === tID )
{
tempArray[ j ].notes = noteData;
tempArray[ j ].comments = commentData;
}
}
iCallback();
});
});
});
})();
}
async.series( taskArr, function( err )
{
callback( err, tempArray );
} );
}
});
}
getRecipeComments:
function getRecipeComments( db, recipeID, callback )
{
query( db, { recipeID : recipeID }, 'comments', callback );
}
查询:
function query( db, query, strColl, callback )
{
var coll = db.get( strColl );
coll.find( query, function( err, doc )
{
if( err )
console.log( err );
callback( err, doc );
});
}
我还将调用分为&#39; getRecipeNotes&#39;和&#39; getRecipeComments&#39;两个单独的任务,但结果是一样的。
你能看出为什么笔记或评论拒绝退货吗?
答案 0 :(得分:0)
问题已经解决。在查询数据库的调用中似乎是一个类型错误。
我只需要做一个简单的事情:
recipeID = recipeID.toString();
查询前的