Saya menemukan sepotong kode Mongoose yang menyertakan query findOne dan kemudian fungsi exec ().
Saya belum pernah melihat metode itu di Javascript sebelumnya? Apa tepatnya yang dilakukannya?
sumber
Saya menemukan sepotong kode Mongoose yang menyertakan query findOne dan kemudian fungsi exec ().
Saya belum pernah melihat metode itu di Javascript sebelumnya? Apa tepatnya yang dilakukannya?
Pada dasarnya saat menggunakan luwak, dokumen dapat diambil dengan bantuan pembantu. Setiap metode model yang menerima kondisi query dapat dieksekusi dengan cara callback
atau exec
metode.
callback
:
User.findOne({ name: 'daniel' }, function (err, user) {
//
});
exec
:
User
.findOne({ name: 'daniel' })
.exec(function (err, user) {
//
});
Oleh karena itu, jika Anda tidak meneruskan callback, Anda dapat membuat kueri dan akhirnya menjalankannya.
Anda dapat menemukan info tambahan di dokumen luwak .
MEMPERBARUI
Sesuatu yang perlu diperhatikan saat menggunakan Promises dalam kombinasi dengan operasi asinkron Mongoose adalah kueri Mongoose bukanlah Promises. Queries mengembalikan thenable , tetapi jika Anda membutuhkan Promise yang nyata, Anda harus menggunakan exec
metode ini. Informasi lebih lanjut dapat ditemukan di sini .
Selama pembaruan, saya perhatikan saya tidak secara eksplisit menjawab pertanyaan:
Saya belum pernah melihat metode itu di Javascript sebelumnya? Apa tepatnya yang dilakukannya?
Ini bukan metode JavaScript asli, tetapi bagian dari API Mongoose.
exec
metode ini. Ini yang setidaknya mereka lakukan di dokumen. Yang pasti Anda bisa memeriksanya sendiri denganModel.find() instanceof require('bluebird')
. Semoga ini membantu.Model.update().exec()
memastikan itu akan dijalankan. Kemudian Anda dapat merespons api tanpa menunggu pembaruan.Daniel menjawab ini dengan cukup indah. Untuk menguraikan daftar lengkap cara membuat dan mengeksekusi kueri, lihat kasus penggunaan berikut:
Pembuatan Kueri
Mongoose tidak akan mengeksekusi query sampai
then
atauexec
telah dipanggil. Ini sangat berguna saat membuat kueri yang kompleks. Beberapa contoh dapat mencakup penggunaanpopulate
danaggregate
fungsi.Eksekusi melalui panggilan balik
Meskipun tidak disukai oleh banyak orang karena sifatnya yang bersarang, kueri dapat dijalankan dengan menyediakan callback opsional.
Kemudian API sebagai Promises / A +
Kueri Mongoose memang menyediakan
then
fungsi. Jangan disamakan dengan janji biasa. Sederhananya, spesifikasi Promises / A + membutuhkanthen
fungsi agar berfungsi seperti yang biasa kita lakukan dengan promise.Fungsi exec
Dari dokumen Mongoose
If you need a fully-fledged promise, use the .exec() function.
sumber
then
kueri untuk mengembalikan janji juga. Ini tidak jauh berbeda denganexec
. Kasus penggunaan yang menurut saya berguna ini adalah saat menggunakan sesuatu sepertiPromise.all
. Tidak yakin apakah janji dikembalikan olehexec
karya dalam konteks seperti itu.exec()
akan mengembalikan janji jika tidak ada panggilan balik yang diberikan. Jadi, pola berikut sangat nyaman dan umum - ini dapat menangani callback atau promise dengan baik:Saya merekomendasikan menggunakan janji Bluebird dengan Mongoose, untuk melakukan itu, gunakan panggilan ini:
sumber