我在登录时向用户发送用户信息。
var userstuff00 = findSub(user['id']);
userstuff00.then(function(sub){
for(var i in sub){
var userstuff01 = findSub(sub[i.toString()]['id']);
userstuff01.then(function(sub2){
for(var i2 in sub2){
//here i is the last object in sub but i2 is for the first i
console.log(sub[i.toString()]);
console.log(sub2[i2.toString()]);
}
});
}
});
这是findSub函数,其中usercollection是mongodb表:
function findSub(stuffCode){
var tempMembers = usercollection.find({'stuff ': stuffCode});
return tempMembers;
}
这是用户对象:
user{
id,
name,
stuff,
subMember[] //list of users where their stuff equals to this users id
}
我想在用户sub2
中添加每个subMember
,但i
的ID不等于i2
的内容(我无法添加i2
}在另一个i
的子成员中。)
如何获取第一个i
的子成员,然后找到第二个i
的子成员?
我的目标是将用户作为子成员的用户列表,这些用户(子成员级别1)具有子成员(子成员级别2)等等(最高级别10): Family Tree
答案 0 :(得分:0)
使用异步代码时,这是一个典型问题:同步代码将在 任何异步代码之前完成。所以这个循环:
for(var i in sub)
...将完成,然后执行其中的任何then
回调。因此,当其中一个被执行时, i 的值已经是 sub 的长度。
为了能够在您调用then
(而不是其回调)时使用 i 的值,有不同的解决方案。其中之一是使用let i
而不是var i
,因为它将在for
循环的每次迭代中定义一个不同的变量。或者您可以将 i 的值绑定为then
回调的参数:
userstuff01.then(function(i, sub2){
// ^^^ added parameter
for(var i2 in sub2){
//here i is the last object in sub but i2 is for the first i
console.log(sub[i.toString()]);
console.log(sub2[i2.toString()]);
}
}.bind(null, i));
// ^^^^^^^^^^^ bind the parameter value to the current value of i.