javascript - NodeJS 等待/异步在对象中不起作用

标签 javascript node.js express

我目前正在nodeJs中开发一个验证模块,我似乎无法理解async/await如何或为什么在我当前的模块中不起作用。

在模块中,我应该能够有多个验证导出,例如:表单、数据等。

每个对象应该有多个验证功能,例如:表单应该有注册、登录、添加等...

这是我的方法

var forms = {
    validation: {
        status: true,
        data: {},
        error: {}
    },

    register: async(data) => new Promise((resolve, reject) => {
        var validation = forms.validation;

        try {
            const errorMessages = await forms.getErrorMessages('register');
            ...
        } catch (error) {
            reject(error);
        }
    }),


    getErrorMessages: (key) => new Promise((resolve, reject) => {
        Errors.
        findOne({ type: 'validation', 'identifier': key }).
        select('content').
        populate('content'). // only works if we pushed refs to children
        exec(function(err, contentObj) {
            if (err) reject(err);
            var errorMessages = {};
            const contentArray = contentObj.content;
            for (var i = 0; i < contentArray.length; i++) {
                var key = contentArray[i].identifier,
                    message = contentArray[i].message;
                errorMessages[key] = message;
            }
            resolve(errorMessages);
        });
    }),

};
exports.forms = forms;

现在,在 try 中定义为 async 函数的 register 函数中,我有 await forms.getErrorMessages( 'register') 应该从数据库返回验证错误消息...该函数有效,它被定义为返回一个 promise ,但我总是得到该函数的 SyntaxError: Unexpectedidentifier 。 ..

谁能解释一下为什么这不起作用?

谢谢

最佳答案

当您已有 Promise 时,无需创建新的 Promise。仅当您将某些非 Promise 的 API 转换为 Promise 时才需要这样做。

Mongoose 也可以 native 返回 Promise,并且 async 函数将允许抛出的任何错误通过 Promise 向上冒泡。

var forms = {

    validation: {
        status: true,
        data: {},
        error: {}
    },

    register: async (data) => {
        var validation = this.validation;
        const errorMessages = await this.getErrorMessages('register');
        ...
    },


    getErrorMessages: async (key) => {
        let contentObj = await Errors.findOne({ type: 'validation', 'identifier': key })
            .select('content')
            .populate('content') // only works if we pushed refs to children
            .exec()

        let errorMessages = {};
        const contentArray = contentObj.content;
        for (var i = 0; i < contentArray.length; i++) {
             let key = contentArray[i].identifier;
             let message = contentArray[i].message;
             errorMessages[key] = message;
        }
        return errorMessages;

    }

};
exports.forms = forms;

关于javascript - NodeJS 等待/异步在对象中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49065817/

相关文章:

node.js - Sequelize 1.7.3 中的时间戳

node.js - CoffeeScript 传递 require() 参数错误

node.js - 重写www.在 Node.JS 中

javascript - React Router Dom v4 处理浏览器后退按钮

node.js - Socket.io、Express 4 和带有 SSL *AND CLUSTER* 的 Nginx 抛出 400(错误请求)?

javascript - 在 Python 和 Javascript 中使用 Selenium 在 Quora 上无限滚动

node.js - 从谷歌云计算引擎上的启动脚本中提取 git 存储库

ios - Braintree:在沙盒模式下创建或更新具有 CVV 验证的客户时出现授权错误

javascript - 使用 React.js JSX 页面时 onClick 按钮事件处理程序不起作用

Javascript 从 dat.GUI 获取值