无法在成功回调中获取创建的文档

时间:2020-08-31 17:25:41

标签: javascript node.js asynchronous mongoose

以下是通过过滤和分页,创建和多次创建来获取所有内容的服务

async function MultipleCreate(customerList, tenantId) {
    try {
            if (customerList == null || customerList.length == 0) {
                return { isSuccess: false, message: 'Cusotmer Data is empty!!', data: customerList };
            }
            var roleId = '';
            var role = await Role.findOne({ name: "customer" });
            if (role) {
                roleId = role.id;
            }
            var customerArrayData = [];
            for (let customerElement of customerList) {
                var createResult = {};
                customerElement.role = roleId;
                var customerCreate = await Create(customerElement, tenantId);
                if (customerCreate.isSuccess) {
                    createResult.isSuccess = customerCreate.isSuccess;
                    createResult.data = customerCreate.data;
                    createResult.message = customerElement.fullName + " Created..";
                } else {
                    createResult.isSuccess = customerCreate.isSuccess;
                    createResult.data = customerCreate.data;
                    createResult.message = customerElement.fullName + " Created failed..";
                }
                customerArrayData.push(createResult);
            }
            return { isSuccess: true, message: '', data: customerArrayData }

    }
    catch (ex) {
        return { isSuccess: false, message: 'Failed to Create Customer!!', data: ex };
    }
}

async function Create(customer, tenantId) {
    try {
        const customerModel = new Customer(customer);
        customerModel._id = new mongoose.Types.ObjectId();
        customerModel.fullName = customer.firstName + ' ' + customer.lastName;
        customerModel.companyName = customer.companyName;
        customerModel.tenantId = tenantId; // Assign tenant Id from header
        customerModel.userType = 'customer';
        customerModel.createdDate = moment.utc();
        try {
            var isValidRoleId = mongoose.Types.ObjectId.isValid(customerModel.role);
            if (!isValidRoleId) {
                var role = await Role.findOne({ name: "customer" });
                if (role) {
                    customerModel.role = role._id;
                }
            }
            //Generate the Password
            var genPWD = pwd.generateAndHashPassword();
            customerModel.salt = genPWD.salt;
            customerModel.password = genPWD.hash;
            // Form Email Object to send Email 

            var customerResponse = await customerModel.save()
                .then(doc => {
                    var sendEmailObj = {
                        username: customerModel.email,
                        name: customerModel.fullName,
                        password: genPWD.password
                    };
                    // implement Email when register               
                    var emailRes = EmailHelper.welcomeEmail(sendEmailObj);
                    return { isSuccess: true, message: 'Customer Created Successfully!!', data: doc }
                }).catch(err => {
                    return { isSuccess: false, message: 'Failed to Create Customer!!', data: err }
                });
            return customerResponse;

        } catch (err) {
            console.log("err", err)
            return { isSuccess: false, data: { code: err.code, errmsg: err.code == 11000 ? "Email Already Exists" : err.errmsg }, message: '' };
        }
    }
    catch (ex) {
        return { isSuccess: false, message: 'Failed to Create Customer!!', data: ex };
    }
}

async function GetAll(req) {
    let tenantId = req.header('x-tenant-id');
    try {
        let pageSize = 10;
        if (req.query.pageSize) {
            pageSize = parseInt(req.query.pageSize);
        }
        let pageNumber = req.query.pageNumber > 1 ? req.query.pageNumber : 1;
        let skip = pageSize * pageNumber - pageSize;
        let filter = {};
        let sorting = {};
        if (req.query.companyName) filter.companyName = { $regex: '.*' + req.query.companyName + '.*', $options: 'i' };;

        filter.tenantId = tenantId;
        filter.isDeleted = false;

        if (req.query.sortBy && req.query.orderBy) {
            let sortByList = req.query.sortBy.split(",");
            let orderByList = req.query.orderBy.split(",");

            for (let i = 0; i < sortByList.length; i++) {
                let sortField = sortByList[i];
                sorting[sortField] = orderByList[i] === "desc" ? -1 : 1;
            }
        }

        var count = await Customer.where(filter)
            .count()
            .then(res => {
                return { isSuccess: true, data: res };
            });

        var response = await Customer.find()
            .where(filter)
            .skip(skip)
            .limit(pageSize)
            .sort(sorting)
            .then(res => {
                return {
                    isSuccess: true,
                    message: 'Customer List!!',
                    data: res,
                    currentPage: pageNumber,
                    pageSize: pageSize,
                    totalRecords: count.data
                };
            }).catch(err => {
                return {
                    isSuccess: false,
                    message: 'Failed to Get Custom List!!',
                    data: err,
                    currentPage: pageNumber,
                    pageSize: pageSize,
                    totalRecords: 0
                };
            });
        return response;
    } catch (error) {
        return {
            isSuccess: false,
            message: 'Failed to Get Customer List!!',
            data: error,
            currentPage: 0,
            pageSize: 0,
            totalRecords: 0
        };
    }

}

Success response with created Data screenshot

Callback get service response failed to fetch created Data screenshot

来自“ MultipleCreate”的响应在其成功响应中具有已创建的记录,证明已创建了记录。但是在回调中,当我单击“ GetAll”服务时,我与现有记录的信息不同。当我刷新页面一次或两次点击相同的“ GetAll”服务时,只有这样我才能得到正确的响应。我在“ customerList”参数中仅将6个对象数组用于“ MultipleCreate”。但是很少有人担心这是CSV导入操作,其中将要导入和创建1000条记录。不知道在回调过程中出了什么问题,以及我必须要做些什么才能使这些工作按预期进行。

0 个答案:

没有答案