我目前正在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/