javascript - await 只在异步函数中有效

标签 javascript asynchronous async-await

我正在尝试重写我的代码以合并 promise 。我知道 mongo 已经包含了 promise ,但我想先多了解一下 promise 。我不明白错误消息,因为我在async 函数 中使用了await。我找到了 this articles这似乎是相似的,但我仍然无法让它工作。

我在这里做错了什么?

错误信息

语法错误: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);
        }
    });

最佳答案

回调函数需要异步

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);
  }
});

关于javascript - await 只在异步函数中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59493631/

相关文章:

c# - 使用 WebClient DownloadStringAsync 下载时引发 TargetInvocableException

javascript - 用于异步 Linux 脚本的 Node.js

调用异步方法的 C# Webservice : Webmethod,,返回 Taskoff 对象

javascript - noUiSlider - 具有两个输入的双范围 slider + vue.js

javascript - Node.js 无限循环功能,在某些用户输入时退出

javascript - 更改选定链接的颜色

c# - 为什么不能从 Task 派生异步方法返回类型?

c# - 如何在此父方法中等待没有异步修饰符的异步方法?

c# - 如何并行执行嵌套的异步/等待代码,同时在等待延续上维护相同的线程?

javascript - 如何使用 jquery 从暂停的地方恢复计时器