我想知道如何设置Express路由,以便在使用promise调用递归函数并获取MongoDB数据时将数据返回给客户端。现在的情况是,我的路由立即执行,数据永远不会被发送回客户端。数据确实会进来,但在数据发送之后才进来。下面是我正在使用的代码:
const fetchTrees = (source, root) => {
return new Promise((resolve, reject) => {
User.find({referrer: source}).then((response) => {
for (person in response) {
const document = response[person]._id
root[document] = {
name: response[person].first_name + ' ' + response[person].last_name,
uppLine: response[person].uppLine,
_id: response[person]._id
}
const descendants = fetchTrees(document, root[document])
root[document].descendants = descendants
}
})
console.log("Hey", root)
if (root._id !== null || root._id !== undefined) {
resolve(root)
} else {
reject("No tree data")
}
})
}
fetchTrees(source, root).then((result) => {
console.log("Returnnn",result)
if (result) {
return res.status(200).send(result)
} else {
return res.status(404).send("No tree found")
}
})
“Hey”和“Returnnn”在数据输入之前就出现了:
Hey {}
Returnnn {}
1条答案
按热度按时间qnakjoqk1#
如果您等待这个递归的递归编译操作,这将有所帮助。您可以使用“Promise.all”函数等待操作完成,而不是立即获得内部promise结果。
代替for循环;
你可以使用这些承诺;