javascript - 当客户端连接到服务器时,NODE.JS 中的 Async Await 失败

标签 javascript node.js asynchronous async-await

当我的 React 客户端连接到服务器时:

index.js:

var mongoAPI = require("./MongoDB/mongodb.js");

app.get("/getImages" , async function(req,res) {
  var db_images = await mongoAPI.getAllImages();  // this is undefined
  console.log(db_images);
  res.json(db_images);
});

它进入数据库:

mongodb.js:

getAllImages = async () => {
  await MongoClient.connect(url, function(err, db) {
    if (err) {
      throw err;
    }
    var dbo = db.db("PicturesDB");
    dbo
      .collection("Images")
      .find({})
      .toArray(function(err, result) {
        if (err) {
          // res.send(err);
          return err;
        } else {
          // res.send(JSON.stringify(result));
          return JSON.stringify(result);
        }
      });
  });
};


module.exports = {
    ...
    ... 
  getAllImages: getAllImages
};

但是,即使数据正确返回,db_images 始终是 undefined (我在 getAllImages 方法中使用“console.log”进行了检查)。

我的请求哪里出了问题?

最佳答案

getAllImages 函数不会返回您的值。它只返回 connect 方法返回的内容。

由于您使用 await 调用 getAllImages 函数,因此返回一个 promise 并用您的值解析它。

getAllImages = async () => {

  return new Promise((resolve, reject) => {

      MongoClient.connect(url, function(err, db) {

       if (err) {
         reject(err)
       }

       var dbo = db.db("PicturesDB");

       dbo
        .collection("Images")
        .find({})
        .toArray(function(err, result) {
          if (err) {

           reject(err)

        } else {

          resolve(JSON.stringify(result));
        }
      });
  });



  })

};

但是,最准确的模式是使用库的 native Promise 接口(interface),如 jfriend00 在评论中指出的那样。

关于javascript - 当客户端连接到服务器时,NODE.JS 中的 Async Await 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57398416/

相关文章:

JavaScript 从内部函数返回值

node.js - NodeJS - 我无法弄清楚的 Mongoose JS 模式错误

node.js - 为什么无服务器端点 URL 不起作用?

node.js - openshift 上的 nodejs 安装 - 如何在启动时添加 --harmony 标志

javascript - 在构造函数方法中将类的所有属性作为参数传递是否有意义?

javascript - 如何使两个不同的图像大小相似而不失真?

javascript - 打开上面的div时使div向下滑动(不打开)

javascript - 涉及异步调用时,如何设置具体的执行顺序?

c# - WCF 中的异步流

c# - 在异步方法中显示进度对话框