我目前正在研究nodeJs中的验证模块,我似乎无法理解async / await如何或为什么在我当前的模块中不起作用。
在模块中,我应该能够有多个验证导出ex:Forms,Data等。
每个对象应该有更多的验证函数,例如:表单应该有注册,登录,添加等...
这是我的方法
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;
现在在register
函数,定义为async
函数,在try
我有await forms.getErrorMessages('register')
应该从数据库返回验证错误消息...函数工作,它被定义为返回一个承诺但我总是得到SyntaxError: Unexpected identifier
的功能...
任何人都可以解释为什么这不起作用?
谢谢
当你已经有了Promise时,没有必要创建new Promise
s。只有当您将一些非承诺的API转换为承诺时,才需要这样做。
Mongoose本身也可以返回承诺,而async
函数将允许任何错误通过承诺冒出来。
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;