Javascript 从NodeJS中获取的子细节遍历和构建树
我试图通过遍历给定ID并将其子项附加到树上来构建树结构。它总是分配user.children='sample',而不是从user.children=usrChild获取用户子项,还尝试usrArr[index]。子项='sample' 我试图实现的内容: 使用userID,我将获取它的子项,现在对于每个子项,我将获取它们的子项,直到没有子项为止 函数UserProfile.getUserChildren返回包含所有子级的数据的承诺。 现在,我们迭代每个子对象并获取它们的子对象 预期输出: 从程序上来说,我期望的是:Javascript 从NodeJS中获取的子细节遍历和构建树,javascript,node.js,promise,es6-promise,Javascript,Node.js,Promise,Es6 Promise,我试图通过遍历给定ID并将其子项附加到树上来构建树结构。它总是分配user.children='sample',而不是从user.children=usrChild获取用户子项,还尝试usrArr[index]。子项='sample' 我试图实现的内容: 使用userID,我将获取它的子项,现在对于每个子项,我将获取它们的子项,直到没有子项为止 函数UserProfile.getUserChildren返回包含所有子级的数据的承诺。 现在,我们迭代每个子对象并获取它们的子对象 预期输出: 从程
[
{
text: {
userID: 1
name: 'Mike'
},
children:[
{
text: {
userID: 2
name: 'John'
},
children [
{
text: {
userID: 4
name: 'Hero'
},
children []
}
]
},
{
text: {
userID: 3
name: 'Kelvin'
},
children []
}
]
}
]
节点JS中的代码:
let UserProfile = require('./UserProfile');
// Love Dad 83273010
let userID = 51405009;
var allDistributors = Array();
rootUser = new Object();
rootUser.text = {userID:userID,name:'Root'};
rootUser.children = [];
function getUserTree(userID){
return new Promise( (resolve,reject) => {
/*
* UserDownline Return User child Array
* Format:
* [
* { text: {
* userID: 45
* name: 'Mike'
* },
* children:[]
* }
* ]
*
*/
UserProfile.getUserChildren(userID).then(async (data) => {
if(data.length > 0){
rootUser.children = data;
/*
* Iterating each user to fetch and assign its child
*/
await rootUser.children.forEach(async (user,index,usrArr) => {
user.children = 'sample'
await getUserTree(user.text.title).then( async(usrChild) => {
/*
Assigning child to root user
*/
usrArr[index].children = usrChild; // STILL NOT ABLE TO ASSIGN VALUE and return user.children as 'sample'
}).then(resolve(rootUser));
});
//resolve(rootUser)
//console.log(rootUser)
//return Promise.all(rootUser);
}else
resolve([]); // return empty child when no child exist
});
//return rootUser.children;
//console.log(rootUser);
});
}
//console.log(JSON.stringify(rootUser));
getUserTree(userID).then((data) => {
console.log(JSON.stringify(data));
});
正如Jaromanda X指出的,
rootUser.children.foreach
返回未定义的,而不是承诺。考虑使用<代码> ROOTUSER。儿童。它返回一个承诺数组,您可以在使用时等待,这将返回一个承诺数组。由于map不修改原始数组,因此需要将rootUser.children
分配给等待的Promise.all
结果,正如Jaromanda X指出的那样,rootUser.children.foreach
返回未定义的结果,而不是Promise。考虑使用<代码> ROOTUSER。儿童。它返回一个承诺数组,您可以在使用时等待,这将返回一个承诺数组。由于map不修改原始数组,您需要将rootUser.children
分配给Promise的等待结果。所有等待xxx.forEach(异步
-这与您认为的不一样…因为forEach
返回(立即)未定义
,forEach回调中没有任何内容是等待
我怎么能实现它或以任何其他方式进行迭代,因此赋值是在完成getUserTree?Array.map后执行的,并带有承诺。所有等待xxx.forEach(异步
-这与您认为的不一样…因为forEach
返回(立即)未定义
,forEach回调中没有任何内容是等待
的,我不知道如何实现它或以任何其他方式进行迭代,所以赋值是在完成getUserTree?Array.map with promise.All后执行的,因为forEach您的示例预期结果没有显示user.text.title
属性。这是传递给getUserTree函数的id中的结果是未定义的。您还需要返回映射中getUserTree的结果仍然是同一问题,因为您的示例预期结果没有显示user.text.title
属性。这将导致传递给getUserTree函数的id是未定义的。您还需要返回映射中getUserTree的结果