NodeJS -如何发送一个变量嵌套回调?(MongoDB查找查询)
NodeJS - how to send a variable to nested callbacks? (MongoDB find queries)
我想在另一个结果集中使用查找查询的结果集。我不能很好地用英语解释这种情况。我将尝试使用一些代码。
People.find( { name: 'John'}, function( error, allJohns ){
for( var i in allJohns ){
var currentJohn = allJohns[i];
Animals.find( { name: allJohns[i].petName }, allJohnsPets ){
var t = 1;
for( var j in allJohnsPets ){
console.log( "PET NUMBER ", t, " = " currentJohn.name, currentJohn.surname, allJohnsPets[j].name );
t++;
}
}
}
});
首先,我得到所有的找到的人都叫John。然后我把这些人作为allJohns。
其次,我在不同的查找查询中逐个获得每个Johns的所有宠物。
在第二次回调中,我再次逐个获得每个宠物。但是当我想显示哪个John是它们的主人时,我总是得到同一个John。
那么,问题是:我如何将每个John分别发送到第二个嵌套回调,并且它们将作为真正的主人和宠物在一起。
我需要复制每个John,但是我不知道怎么做
Javascript没有块作用域,只有函数作用域。使用forEach
将为每个循环创建一个新的作用域,而不是for .. in ..
:
People.find( { name: 'John'}, function( error, allJohns ){
allJohns.forEach(function(currentJohn) {
Animals.find( { name: currentJohn.petName }, function(err, allJohnsPets) {
allJohnsPets.forEach(function(pet, t) {
console.log( "PET NUMBER ", t + 1, " = ", currentJohn.name, currentJohn.surname, pet.name );
});
});
});
});
您必须更多地关注异步性质。
People.find( { name: 'John'}, function( error, allJohns ){
for( var i=0; i<allJohns.length; i++ ){
(function(currJohn){
var currentJohn = currJohn;
Animals.find( { name: currentJohn.petName }, function(error, allJohnsPets){
for(var j=0; j<allJohnsPets.length; j++){
console.log( "PET NUMBER ", (j+1), " = " currentJohn.name, currentJohn.surname, allJohnsPets[j].name );
}
})
})(allJohns[i]);
}
});
相关文章:
- 嵌套回调范围和rootScope AngularJS
- 角度嵌套指令回调
- 嵌套两个以上任务的回调
- 试图从嵌套的回调函数返回数据
- 使用嵌套回调的值作为父函数的返回
- Chrome API未在嵌套回调中注入cookie
- 从嵌套在函数中的Node.js回调返回对象
- 任何使JavaScript中的嵌套回调代码更具可读性的方法
- 如何在 JavaScript 中为嵌套脚本标记追加注册回调
- 从节点中的多个嵌套回调中返回值
- JavaScript 中的嵌套回调
- 将函数传递给 Node.js 中的嵌套回调
- Jquery $.ajax 获取响应与将“this”对象嵌套传递到“success”回调函数冲突
- 在最终回调中嵌套异步函数如何工作
- 量角器根据条件单击嵌套元素,错误 - 在指定的超时内未调用异步回调
- 为什么延迟的“then”回调在嵌套的 AJAX 的成功回调之前触发
- 防止使用迭代的 JavaScript 中的嵌套回调
- 扁平化嵌套回调
- 平展嵌套回调
- Jquery .fadein .fadeout回调嵌套顺序不正确