我的异步函数要么无法访问找到的var的更新版本,要么在异步调用完成之前就已解决。我不知道这是什么问题,为什么不起作用
如果尝试在不同的地方调用return true,甚至延迟返回时间,但是在处理函数中,它始终为空。
我不明白为什么它无法访问更新的var。
没有多少格式设置或语法更改似乎可以解决此问题。
router.get('/search', (req, res) => {
var country = req.query.country;
var found = [];
var countrySearch = () => {
if(country==="Worldwide"){return true}
conf.find({country: { "$regex": country, "$options": "i" }}, function(err, conferences){
if(found.length!=0){
for(conference in conferences){
for(item in found){
if(found[item]._id!=conferences[conference]._id)
found.push(conferences[conference])
}
}
return true;
}else{
for(i=0;i<=conferences.length;i++)
found.push(conferences[i])
return true;
}
})
}
function resolve(){
res.render('index', {list: found});
}
async function handler(){
const place = await countrySearch();
return resolve();
}
handler();
})
如果console.log在推送到找到后的输出,则在Async函数内部,它会正确返回并附带附加项。
将其作为变量传递给Pug时,以及在resolve函数内的任何位置,找到的var都显示为空。
已解决。
功能!=承诺;
var countrySearch = conf.find({country: { "$regex": country, "$options": "i" }}, function(err, conferences){
if(country==="Worldwide"){return true}
if(found.length!=0){
for(conference in conferences){
for(item in found){
if(found[item]._id!=conferences[conference]._id) found.push(conferences[conference])
}
}
return true;
}else{
for(i=0;i<=conferences.length;i++){
found.push(conferences[i])
if(i===conferences.length) return true;
}
}
})