Async khi lưu dữ liệu trong Mongoose



  • Chào anh em, hiện tại mình mới làm quen với Mongoose có vấn đề như sau
    mình có 2 Schema Category và News
    Hiện tại chỉ quan tâm 1 News có thể thuộc về nhiều Category
    Nhưng khi đang thêm 1 list Category chưa xong thì nó đã nhảy xuống thêm News
    => lstCate luôn rỗng
    Cho mình hỏi làm sao thêm xong tất cả Category rồi thì thêm News mới được chạy
    0_1493748306686_113.png



  • Bạn có thể bỏ đoạn "luu bai viet" vào callback của "them category", mình nghĩ là vậy.



  • dính vòng for bạn ui :(



  • This post is deleted!


  • @nmanhit dung thu Promise.all di ban

    var arrPromise = []
    
    for(.. i < category.length ..){
      var newCate = new Category({
        Name: category[i]
      })
    
      arrPromise.push(
        newCate.save()
      )
    }
    
    Promise.all(arrPromise)
    .then(lstCate => {
      var news = new News({
        Name: ..,
        Category: lstCate
      })
    
      return news.save()
    })
    .then(data => {
      console.log('success')
    })
    .catch(err => {
      console.log('err: ', err)
    })
    


  • @nmanhit

    var async = require('async');
    var category = [...],
    	lstCate = [];
    var news = ... ; 
    
    async.forEachOf(category, function(value, index, callback) {
    	var newCategory = Category({Name:value});
    	newCategory.save(function(err, doc) {
    		if (!err) {
    			lstCate.push(doc.id);
          return callback();
    		} else {
          return callback(err);
    		};
    	});
    }, function(err) {
      if (!err) {
        news.save(...);
      } else {
        console.error(err);
      }
    });
    


  • Thanks 2 đồng chí rất nhiều, đã mò ra Promise.all , nó hơi ảo diệu chút :)


Log in to reply