Mongoose ORM异步等待

时间:2017-12-31 15:31:42

标签: express mongoose mongoose-schema

任何人都可以帮助我如何使用async和await功能管理此代码。我的要求是插入100个数据然后mongo数据库断开连接。

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();

    });

1 个答案:

答案 0 :(得分: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);
}