MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Penanganan yang benar dari tindakan async Mongo di Node Promise

Karena semua operasi asinkron dari driver MongoDB sudah mengembalikan janji, Anda tidak boleh menggunakan new Promise sama sekali, tetapi buatlah rantai janji:

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

Saya mengerti bahwa Anda ingin meneruskan database sebagai argumen untuk then . berikutnya , tetapi Anda akan mengalami masalah bahwa itu tidak akan tersedia di catch pawang Salah satu solusinya adalah dengan menggunakan variabel cakupan fungsi yang ditetapkan setelah membuka koneksi, seperti kode di atas.

Jika Anda tidak menyukainya, Anda dapat membuat rantai janji baru di dalam .then handler untuk 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. Agregasi Pymongo - meneruskan daftar python untuk agregasi

  2. Menambahkan dokumen anak ke dokumen mongodb yang ada

  3. model luwak, array string, array struktur objek

  4. Menangani kueri database asinkron di node.js dan mongodb

  5. MongoDB dan Robomongo:Tidak dapat terhubung (otentikasi)