cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Janji dalam nod juga bersarang

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?

世界只因有你世界只因有你2729 hari yang lalu745

membalas semua(5)saya akan balas

  • PHP中文网

    PHP中文网2017-06-05 11:13:11

    Janji bukanlah penyelesaian muktamad dan ia tidak semestinya lebih elegan daripada panggilan balik async/menunggu

    balas
    0
  • 滿天的星座

    滿天的星座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,

    balas
    0
  • 我想大声告诉你

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

    balas
    0
  • PHPz

    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?

    balas
    0
  • 迷茫

    迷茫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.

    balas
    0
  • Batalbalas