javascript - Janji dalam nod juga bersarang
世界只因有你
世界只因有你 2017-06-05 11:11:11
0
5
749

1.

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

2. Kod penyelesaian adalah seperti berikut

//封装查询一条函数
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?

世界只因有你
世界只因有你

membalas semua(5)
洪涛

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,

我想大声告诉你
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?

PHPzhong
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?

迷茫

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan