sql >> Database >  >> NoSQL >> MongoDB

Correcte afhandeling van asynchrone Mongo-acties in Node Promise

Aangezien alle asynchrone bewerkingen van het MongoDB-stuurprogramma al een belofte retourneren, moet u new Promise niet gebruiken helemaal niet, maar zet een belofteketen op:

function updateDatabase(name, token) {
  let database;
  return MongoClient.connect(MONGODB_URL).then(db => {
    database = db;
    return database
      .collection("testCollection")
      .update({ name }, { $pull: { tokens: { $in: [token] } } });
  })
  .then(() => {
    return database.collection("log").insert({
      name,
      token
    });
  })
  .then(() => {
    database.close(true);
  })
  .catch(err => {
    database.close(true);
    throw err;
  });
}

Ik begrijp dat je database wilt doorgeven als argument voor de volgende then , maar je zult het probleem tegenkomen dat het niet beschikbaar zal zijn in de catch afhandelaar. Een oplossing is om een ​​functiebereikvariabele te gebruiken die wordt toegewezen na het openen van de verbinding, zoals de bovenstaande code doet.

Als je dat niet leuk vindt, kun je een nieuwe belofteketen maken binnen de .then handler voor MongoClient.connect :

function updateDatabase(name, token) {
  return MongoClient.connect(MONGODB_URL).then(database => {
    return database
      .collection("testCollection")
      .update({ name }, { $pull: { tokens: { $in: [token] } } })
      .then(() => {
        return database.collection("log").insert({
          name,
          token
        });
      })
      .then(() => {
        database.close(true);
      })
      .catch(err => {
        database.close(true);
        throw err;
      });
  });
}


  1. Hoe kan ik sorteren dat nulls als laatste in mongodb worden besteld?

  2. Hoe installeer ik mongodb op de beaglebone black

  3. Mongodb-aggregatiepijplijn hoe een groepspush te beperken

  4. Selecteer Groeperen op aantal en verschillende tellingen in dezelfde mongodb-query