Rumah > Soal Jawab > teks badan
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?
PHP中文网2017-06-05 11:13:11
Janji bukanlah penyelesaian muktamad dan ia tidak semestinya lebih elegan daripada panggilan balik async/menunggu
滿天的星座2017-06-05 11:13:11
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,
我想大声告诉你2017-06-05 11:13:11
db_conn()
.then(db=>{
return {
db:db,
test:'test',
data:{}
}
})
.then(findOneData)
.then(r=>{
console.log(r);
});
Akhir sekali, ubah cara findOneData
anda menerima parameter Adakah ia lebih baik?
PHPz2017-06-05 11:13:11
db_conn()
.then(db => findOneData(db, "test", {}))
.then(data => console.log(data));
Adakah ini kelihatan lebih menyenangkan mata?
(async function() {
const db = await db_conn();
const data = await findOneData(db, "test", {});
console.log(data);
})();
Bukankah ini lebih sedap mata memandang?
迷茫2017-06-05 11:13:11
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.