javascript - Async/await 未按预期顺序执行

标签 javascript node.js mongodb async-await

我目前正在尝试了解 MongoDB 和 javascript 中的异步函数,过去几个小时一直在搞乱,但没有运气。

async function getObj(name) {
  var db = await mongo.connect(DBURL, {
    useNewUrlParser: true
  });

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

  var meme;

  await dbo.collection("files").findOne({
    "_id": name
  }, function(err, res) {
    console.log(res + " a");
    meme = res;
    console.log(meme + " b");
  });

  console.log(meme + " c");
  await db.close();
  console.log(meme + " d");
  return meme;
}

程序按顺序打印它: C d A

查询工作正常,如果我执行 console.log(res),我会得到具有正确结果的对象,因此这不是问题。

为什么程序会忽略前面的等待并最终打印并返回 undefined?

最佳答案

当您将db.findOne与回调一起使用时,您没有使用可以await的Promise。你应该像这样等待:

async function getObj(name) {
  var db = await mongo.connect(DBURL, {
    useNewUrlParser: true
  });

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

  var meme = await dbo.collection("files").findOne({
    "_id": name
  });

  console.log(meme + " c");
  await db.close();
  console.log(meme + " d");
  return meme;
}

关于javascript - Async/await 未按预期顺序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51810248/

相关文章:

mongodb - 未定义 : revel. Revel 应用程序启动时的 LoadConfig

javascript - 为什么<video>绘制到<canvas>时质量会急剧下降?

javascript - 如何删除非字母数字字符和空格,但在 JavaScript 中保留外语

Node.js 多包项目?

node.js - Gekko Auto Trading bot 在 ubuntu 上安装失败

mongodb - 将数组封装/转换为对象数组

javascript - 为什么在维度变量中无法识别 .domain、tickFormat 和 tickValues? (d3,平行坐标)

javascript - 如何清空数组

javascript - 如何在Javascript中顺序调用Python连接:Node. js

mongoDB Atlas ♥︎ Sailsjs(waterline sails-mongo 适配器)