JavaScript async/await:await 是保留字 [重复]
Posted
技术标签:
【中文标题】JavaScript async/await:await 是保留字 [重复]【英文标题】:JavaScript async/await: await is a reserved word [duplicate] 【发布时间】:2018-04-13 03:52:57 【问题描述】:这是一个检查 mongoose 是否有重复记录的函数。在这种情况下,name
和 email
是唯一字段,因此如果数据库中存在具有相同名称或电子邮件的记录,则无法插入新记录:
const checkIfDatabaseHasUsersWithSameNameAndEmail = async () =>
uniques = ['name', 'email'];
uniques.map((field) =>
let query = ;
query[field] = data[field];
query.deleted = false;
let result = await model.findOne(query); <== ERROR: await is a reserved word
if (result)
errors.push(
field: field,
message: 'A record already exists in database for ' + field + '=' + data[field]
);
);
if (errors.length > 0)
return errors;
schema.statics.create = function (data)
let errors = await checkIfDatabaseHasUsersWithSameNameAndEmail(); <== ERROR: await is a reserved word
if (errors)
throw new Error(errorMessages);
let company = new this(data);
return company.save();
运行时,我在代码中发现以下错误:await is a reserved word
这是我第一次使用 async/await,所以可能我用错了方法。我的目标是按顺序运行唯一的测试(findOne),如果一切顺利,保存新的寄存器。
【问题讨论】:
你在传递给.map()
的非异步回调中使用await
。
您实际使用的匿名函数await
未声明async
。
是的。范围问题。
感谢所有 cmets,但是...我应该在代码中修复什么?
@Mendes 你能告诉我们这应该做什么吗?你期待findAny
给你回东西吗?如果是,它应该返回什么?
【参考方案1】:
这个错误是因为你试图等待一些东西,但没有声明函数异步。我没有用猫鼬对此进行测试,但它看起来像这样。
async function checkIfDatabaseHasUsersWithSameNameAndEmail(data)
const uniques = ['name', 'email'];
return Promise.all(uniques.map(async (field) =>
const query = ;
query[field] = data[field];
query.deleted = false;
return model.findOne(query);
));
schema.statics.create = async function create(data)
try
const results = await checkIfDatabaseHasUsersWithSameNameAndEmail(data);
results.forEach((result) =>
console.log(`Here's the issue: $JSON.stringify(result)`);
throw new Error('Do something about it.');
);
const company = new this(data);
return company.save();
catch (error)
throw error;
;
【讨论】:
这将使映射器函数返回Promise
's ...
然后您可以方便地将其传递给 Promise.all以上是关于JavaScript async/await:await 是保留字 [重复]的主要内容,如果未能解决你的问题,请参考以下文章