Đổ dữ liệu của nhiều collection trong mongodb ra ngoài website trang chủ

nodejs

(Philips 408) #1

tôi muốn đỗ dữ liệu của nhiều collection trong mongodb ra ngoài website trang chủ của tôi và tôi đã làm như code ở bên dưới. mọi người xem giúp dùm có đúng ko ạ hay có cách nào chỉ điểm ko ạ . xin cảm ơn.!

  function index(req , res , next){ 

    var store_product = [];    
    var store_banner = [];  
    var store_newest = [];   

    db.collection("product").find({}).toArray(function(err , product){
      store_product = product;

      db.collection("banner").find({}).toArray(function(err , banner){
        store_banner = banner;        

        db.collection("newest").find({}).toArray(function(err , newest){
          store_newest = newest;
          return res.render("/index" , {product : product ,banner : banner , newest : newest}); 
        })
      })
    })   
  }

(*grab popcorn*) #2

Làm vậy không sai nhưng nó mất đi sự bất đồng bộ và có thể làm code bị chậm đi.
Để nhanh hơn bạn có thể cho 3 hàm chạy cùng lúc và chờ trả về kết quả cùng 1 thời điểm thông qua cú pháp async/await + Promise.all

Vì toArray trả về 1 promise nên ta làm được như sau:

function async index(...) {
   ...
    // chạy 3 promise cùng lúc, chờ khi nào cả 3 promise hoàn thành thì sẽ trả về kết quả
    const [product, banner, newest] = await Promise.all([
     db.collection("production").find({}).toArray(),
     db.collection("banner").find({}).toArray(),
     db.collection("newest").find({}).toArray(),
    ])
    return res.render("/index" , { product, banner, newest }); 
}

(Philips 408) #3

Tôi đã từng có ý tưởng xẽ làm như cách của bạn. Nhưng ko biết viết như thế nào…giờ thì tôi đã biết cách phải làm sao…xin chân thành cảm ơn bạn.!!


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?