Mongoose ORM 异步等待

Posted

技术标签:

【中文标题】Mongoose ORM 异步等待【英文标题】:Mongoose ORM async await 【发布时间】:2018-06-11 03:22:14 【问题描述】:

任何人都可以帮助我如何使用异步和等待功能管理此代码。我的要求是插入 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】:

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

【讨论】:

以上是关于Mongoose ORM 异步等待的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 中的 Model.findById() - 异步/等待 [重复]

Node.js/Mongoose 等待异步 For 循环

countDocuments Mongoose 的问题:它实际上并没有等待回调函数执行

Mongoose

mongoose--------ORM数据操作框架

如何使用 mongoose ORM 存储/检索到 mongodb