2017-12-31 116 views
1

私はどのように非同期機能を使用してこのコードを管理することができます助けてください。私の要件は、100データを挿入した後、mongoデータベースを切断した後です。Mongoose ORM async await

var faker = require('faker'); 
    var mongoose = require('mongoose'); 
    mongoose.connect('mongodb://localhost:27017/shopping'); 
    mongoose.Promise = global.Promise; 
    var Product = require('../models/product'); 



    async function insertDocument(){ 
     for(var i=0;i<=100;i++){ 
      try{ 
       var product = new Product({ 
        imagePath:faker.image.image(), 
        title:faker.commerce.productName(), 
        description:faker.lorem.paragraph(), 
        price:faker.commerce.price() 
       }); 

       product.save(); 
      }catch (err) { 
       console.log(err); 

      } 
     } 


    } 
    insertDocument().then(function() { 
     // mongoose.disconnect(); 

    }); 

答えて

3

product.save()約束を返します。 100個の文書を連続して挿入する場合は、awaitを使用します。あなたが並列で100件の文書を挿入したい場合は、asyncを必要としないとPromise.all

シーケンシャル

async function insertDocument(){ 
    for(var i=0;i<=100;i++){ 
     try{ 
      var product = new Product({ 
       imagePath:faker.image.image(), 
       title:faker.commerce.productName(), 
       description:faker.lorem.paragraph(), 
       price:faker.commerce.price() 
      }); 

      await product.save(); 
     }catch (err) { 
      console.log(err); 

     } 
    } 

} 

パラレル

function insertDocument(){ 
    let promises = []; 
    for(var i=0;i<=100;i++){ 
     var product = new Product({ 
      imagePath:faker.image.image(), 
      title:faker.commerce.productName(), 
      description:faker.lorem.paragraph(), 
      price:faker.commerce.price() 
     }); 

     promises.push(product.save()); 
    } 

    return Promise.all(promises); 
} 
を使用する必要があります