MongoDB mongoose findOneAndUpdate()wait不等待。A3在A2之前运行

MongoDB mongoose findOneAndUpdate()wait不等待。A3在A2之前运行,mongodb,mongoose,async-await,Mongodb,Mongoose,Async Await,A3日志在A2之前运行。我该如何解决这个问题?我想等到更新返回,然后将结果用于下一个逻辑。提前谢谢 const MongoClient = require("mongodb").MongoClient; console.log('A1'); // Inserting into DB await db.collection(companyCollection).findOneAndUpdate({"_id": new mongo.ObjectID(companyId)}, {$set

A3日志在A2之前运行。我该如何解决这个问题?我想等到更新返回,然后将结果用于下一个逻辑。提前谢谢

const MongoClient = require("mongodb").MongoClient;

console.log('A1');
   // Inserting into DB
   await db.collection(companyCollection).findOneAndUpdate({"_id": new mongo.ObjectID(companyId)}, {$set: company}, {upsert: false}, await async function (err, result) {
      console.log('A2');
      let resultRes = null;
      if (err) {
         resultRes = { success: false };
      } else {
         resultRes = { success: true };
      }
      return callback(err ? true : false, resultRes);
 });
console.log('A3');

findOneAndUpdate
有两个签名,要么返回承诺,要么调用回调。您的版本使用回调版本,因此添加
await
是毫无意义的,因为不会返回任何承诺

下面是一个利用promise语法的简单重写:

const MongoClient = require("mongodb").MongoClient;

async function doSomething() {
    console.log('A1');
    // Inserting into DB
    let result = await db.collection(companyCollection).findOneAndUpdate({"_id": new mongo.ObjectID(companyId)}, {$set: company}, {upsert: false});
    console.log('A2');

    ... do whatever you want ... 
    console.log('A3');
}

return doSomething();