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

Asinkron, Panggilan Balik, Penutupan, Astaga

Jika saya memahaminya dengan benar, Anda akan ingin melakukan sesuatu seperti ini:

var positions = this.getPositions(function(positions) {
    console.log(positions[0]);
});

Artinya, Anda ingin menulis "getPositions" dengan cara menerima parameter panggilan balik tunggal yang dipanggil setelah posisi berhasil dimuat, dan diteruskan ke array posisi. Di getPositions Anda dapat memeriksa apakah posisi telah dimuat, dan jika demikian, langsung panggil panggilan balik. Jika tidak, Anda akan menambahkannya ke antrean panggilan balik (mis. this.positionsLoadedCallbacks ), di mana Anda mengulangi setelah semua posisi dimuat (saya pikir itu akan ada di suatu tempat di load Anda fungsi di dekat me.orderPositions() ).

Misalnya, getPositions . Anda fungsi mungkin terlihat seperti ini:

getPositions : function(callback) {
    if(this.positions !== null) {
        callback(this.positions);
        return;
    } 

    this.positionsLoadedCallbacks.push(callback);
},

Di suatu tempat setelah Anda yakin posisi telah dimuat (yaitu dalam panggilan balik sukses loadJSON), Anda harus meletakkan sesuatu seperti ini:

for(var i=0; i < this.positionsLoadedCallbacks.length; i++) {
    this.positionsLoadedCallbacks[i](this.positions);
}

Dan jangan lupa untuk menginisialisasi this.positionsLoadedCallbacks :)

console.log trivia

Alasan console.log(positions) bekerja dan console.log(positions[0]) tidak mudah:jika Anda memberikan referensi objek ke console.log , objek akan diperiksa saat Anda mengklik panah kecil "perluas" dan coba lihat di dalam objek/array. Pada saat Anda mengklik panah itu, posisi telah dimuat, tentu saja. Namun, jika Anda melewatkan elemen larik tertentu (mis. positions[0] ) itu akan langsung mencoba mencari nilai itu, ternyata masih undefined , dan catat hasilnya di konsol.

Cobalah sendiri:

var i = [];
console.log([i]);
i.push(123);

Cuplikan sebelumnya, di chrome 24, menunjukkan [Array[0]] di konsol, tetapi ketika saya memperluasnya, itu memberi tahu saya bahwa array sebagai length: 1 dan elemen pertamanya adalah 123




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menggunakan Aplikasi Meteor di iPad yang disebarkan ke server jarak jauh dengan Meteor-up (masalah saat menghubungkan ke mongodb)

  2. Pelaporan MongoDB dan BIRT?

  3. Menyimpan objek luwak menjadi dua koleksi

  4. Cara mencapai koneksi hanya baca menggunakan pymongo

  5. kueri subelemen mongodb