gpt4 book ai didi

javascript - 从匿名函数外部访问变量

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:54 24 4
gpt4 key购买 nike

我有一个在 2 个不同数据库中执行 2 个查询的路由,如下所示:

app.post('/location',function(req,res){

Db.find({id:anId},function(err,doc){
myDocs=[]
for (var i = doc.length - 1; i >= 0; i--) {
myDocs.push(doc[i])
otherDocs=[]
otherDb.find({id:doc[i].id},function(err,doc2){
for (var i = doc2.length - 1; i >= 0; i--) {
otherDocs.push(doc2[i])
}
})
myDocs.push(otherDocs)
}
res.send(myDocs)
})

})

这里的问题是otherDocsotherDb 中匿名函数的本地函数,我无法从外部访问它并将其插入 myDocs 。我怎样才能做到这一点?

最佳答案

您没有遇到范围问题,而是遇到了异步问题。由于循环内部包含异步代码,因此您必须先等待回调完成,然后才能将它们pushmyDocsres.send

最简单的解决方案是使函数async,然后await每个内部.find(转换为Promise):

app.post('/location',function(req,res){
Db.find({id:anId}, async function(err,doc){
const myDocs = [];
for (const oneDoc of doc.reverse()) {
myDocs.push(oneDoc);
const doc2 = await new Promise(res => {
otherDb.find({id: oneDoc.id}, (err,doc2) => res(doc2));
});
myDocs.push(doc2.reverse());
}
res.send(myDocs);
});
});

请注意,这将逐一迭代每个 oneDocfind - 如果您想一次而不是并行发送所有请求,请改用 Promise.all

关于javascript - 从匿名函数外部访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50504077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com