Jika terdapat dua koleksi mongodb, satu adalah pengguna dan satu lagi adalah siaran, dan maklumat pengguna yang sepadan dipaparkan dalam senarai siaran, pemprosesan tak segerak konvensional terlalu bersarang untuk menyelesaikannya, dan mendapati bahawa terdapat juga a masalah bila selesaikan janji
//封装查询一条函数
findOneData = function(db, colName, data) {
return new Promise(function(reslove, reject) {
db.collection(colName).find(data).toArray(function(err, data) {
if (err) {
console.log("数据查询错误" + err);
reject(err);
return;
}
reslove({ db: db, data: data });
});
});
};
db_conn()
.then(function(db) {
return findOneData(db, "test", {});
})
.then(function(data) {
console.log(data);
});
Betul ke cara ni?
Janji bukanlah penyelesaian muktamad dan ia tidak semestinya lebih elegan daripada panggilan balik async/menunggu
Terdapat tiga titik tulis kod di atas terus di db_conn, dan kemudian kembalikan ini
Gunakan tangkapan di lapisan paling luar untuk menangkap pengecualian.
Padam console.log, nampak pelik,
Akhir sekali, ubah cara
findOneData
anda menerima parameter Adakah ia lebih baik?Adakah ini kelihatan lebih menyenangkan mata?
Bukankah ini lebih sedap mata memandang?
Penyelesaian Promise menyelesaikan masalah panggilan balik tak segerak tanpa menambah unsur bahasa, jadi mesti ada beberapa had.
Di atas panggilan balik asal, Promise akan menambah sekurang-kurangnya satu lapisan panggilan balik, jadi apabila rantai panggil balik asal sangat pendek, seperti subjek soalan, hanya ada satu lapisan, nampaknya tiada kelebihan dalam menggunakan Janji, yang biasa.
Jika anda menghadapi situasi yang lebih kompleks dan lebih banyak tahap bersarang, anda boleh melihat nilai menggunakan Promise.
Semua orang di tingkat atas telah menyediakan kaedah penulisan yang baik, jadi saya tidak akan bercakap lebih lanjut.