【问题标题】:Await is only valid in async functionsAwait 仅在异步函数中有效
【发布时间】:2019-12-27 05:37:29
【问题描述】:

我正在尝试重写我的代码以包含承诺。我知道 mongo 已经包含了 Promise,但我想先更多地了解 Promise。我不明白错误消息,因为我在 async 函数 中使用了 await。我发现this articles 似乎做了类似的事情,但我仍然无法让它工作。

我在这里做错了什么?

错误信息

SyntaxError: await 仅在异步函数中有效

代码

    app.post('/search/word',urlencodedParser, async function(req, res){
        try{
            MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
                if (err) throw err;
                let dbo = db.db("words");

                //Declare promise
                let searchWord = function(){
                    return new Promise(function(resolve, reject){

                        dbo.collection("word").find({"$text": {"$search": req.body.word}})
                        .toArray(function(err, result) {
                            err ? reject(err) : resolve(result);
                        });
                    });
                };

                result = await searchWord();

                db.close();
                res.setHeader('Content-Type', 'application/json');
                res.send(JSON.stringify(result));
            });

        } catch(e) {
            console.log(e);
        }
    });

【问题讨论】:

  • 您有一个异步函数async function(req, res),但await 不在其中 - 您在回调function(err, db) 中有await,它不是异步的。

标签: javascript asynchronous async-await


【解决方案1】:

回调函数需要异步

app.post('/search/word',urlencodedParser, async function(req, res){
  try{
    MongoClient.connect(url, { useNewUrlParser: true }, async function(err, db) {
      if (err) throw err;
      let dbo = db.db("words");

      //Declare promise
      let searchWord = function(){
        return new Promise(function(resolve, reject){

          dbo.collection("word").find({"$text": {"$search": req.body.word}})
          .toArray(function(err, result) {
            err ? reject(err) : resolve(result);
          });
        });
      };

      result = await searchWord();

      db.close();
      res.setHeader('Content-Type', 'application/json');
      res.send(JSON.stringify(result));
    });

  } catch(e) {
      console.log(e);
  }
});

【讨论】:

    猜你喜欢
    • 2020-09-07
    • 2019-09-12
    • 1970-01-01
    • 2022-06-18
    • 2020-12-23
    • 2020-08-13
    • 2020-04-15
    • 2019-06-14
    • 1970-01-01
    相关资源
    最近更新 更多