MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Правилно обработване на асинхронни Mongo действия в Node Promise

Тъй като всички асинхронни операции на драйвера MongoDB вече връщат обещание, не трябва да използвате new Promise изобщо, но настройте обещаваща верига:

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

Разбирам, че искате да подадете database като аргумент за следващия then , но ще се натъкнете на проблема, че няма да е наличен в catch манипулатор. Едно решение е да се използва променлива с функционален обхват, която се присвоява след отваряне на връзката, както прави кодът по-горе.

Ако това не ви харесва, можете да създадете нова обещаваща верига вътре в .then манипулатор за 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Набор от реплики на MongoDB с проста идентификация с парола

  2. Най-бързият начин за получаване на хистограма на размерите на масива с помощта на рамката за агрегиране на MongoDB

  3. Как да валидирам обектни ключове и стойности в Mongoose Schema?

  4. Как да използвате MongoDB GeoSpatial Index в C++

  5. Възможно ли е да повторите mongo курсор два пъти?