MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Xử lý chính xác các hành động Mongo không đồng bộ trong Node Promise

Vì tất cả các hoạt động không đồng bộ của trình điều khiển MongoDB đã trả về một lời hứa, bạn không nên sử dụng new Promise nhưng hãy thiết lập một chuỗi hứa hẹn:

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

Tôi hiểu rằng bạn muốn chuyển database làm đối số cho then , nhưng bạn sẽ gặp phải sự cố rằng nó sẽ không khả dụng trong catch người xử lý. Một giải pháp là sử dụng một biến phạm vi chức năng được gán sau khi mở kết nối, giống như đoạn mã ở trên.

Nếu bạn không thích điều đó, bạn có thể tạo một chuỗi hứa hẹn mới bên trong .then trình xử lý cho 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. Tạo một cụm cơ sở dữ liệu trong đám mây với MongoDB Atlas

  2. Cách chèn vào bộ sưu tập MongoDB với một vị trí

  3. Kỳ lạ MongoDB / Node Giải thích kết quả

  4. Akka và ReactiveMongo

  5. Tương đương với xóa theo tầng được đề xuất trong MongoDB cho mối quan hệ N:M là gì?