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

Pernyataan break ilegal (Node.js)

break . Anda pernyataan tidak berada di dalam tubuh perulangan. Sebaliknya, di dalam tubuh suatu fungsi, yaitu findOne panggilan balik Untuk melihat ini lebih jelas, akan sangat membantu untuk sementara menggunakan fungsi bernama sebagai penangan panggilan balik Anda:

var cb = function(err, data){
    if (data.id){
        uniqueNumber++;
    }
    else {
        saveLandmark(newUnique);
        break;  // not inside a loop!
    }
};

db.collection('landmarks').findOne({'id':uniqueIDer}, function(err, data){
    //if ID exists already
    if (data.id){
        var uniqueNumber = 1;
        while (1) {
            var uniqueNum_string = uniqueNumber.toString(); 
            var newUnique = data.id + uniqueNum_string;
            db.collection('landmarks').findOne({'id':newUnique}, cb);
        }
    }
    else {
        saveLandmark(uniqueIDer);
    }
});

Cukup jelas sekarang bahwa break di badan fungsi panggilan balik tidak di dalam satu lingkaran! Saya juga membuat masalah dengan cara lain karena uniqueNumber dan newUnique nilai tidak lagi dalam ruang lingkup, tapi itu masalah yang berbeda. :) Hal penting untuk dilihat di sini adalah bahwa suatu fungsi memperkenalkan batas "keras" dalam kode Anda yang mungkin sulit dilihat hanya berdasarkan sintaks bahasa. Inilah salah satu alasan mengapa gaya pemrograman callback ini bisa sangat sulit untuk diperbaiki.

Bahkan, jauh lebih sulit untuk melakukan ini daripada upaya awal Anda pada kode yang akan diimplikasikan. Anda harus memiliki cara untuk meneruskan sinyal sukses melalui lapisan panggilan balik yang mungkin berubah-ubah saat Anda berulang kali memanggil findOne dan analisis hasilnya (secara asinkron).

Anda mungkin mendapatkan bantuan dengan ini dengan menggunakan async yang luar biasa perpustakaan, misalnya https://github.com/caolan/async#whilst .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Driver MongoDB-Java:Tangkap pengecualian saat penyisipan gagal

  2. tidak dapat memperbarui dokumen melalui 'findById' dan save() dengan janji

  3. Kueri Agregasi MongoDB untuk Dihitung

  4. alternatif untuk menggunakan 'menunggu' dengan lazy_static! makro berkarat?

  5. Oplog MongoDB memiliki catatan dengan titik-titik di nama kunci, yang tidak dapat ditanyakan, afaict