异步功能无法识别更新的var;完成之前解析异步功能

时间:2019-08-05 18:31:42

标签: javascript node.js express mongoose async-await

我的异步函数要么无法访问找到的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;
      }
    }
  })

0 个答案:

没有答案