当前位置: 首页 > 知识库问答 >
问题:

JavaScript async/await:await是一个保留字[duplicate]

饶谦
2023-03-14

这是一个检查mongoose上重复记录的函数。在这种情况下,nameemail是唯一字段,因此,如果数据库中有同名或电子邮件的记录,则无法插入新记录:

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();
}

在运行时,我在代码中发现以下错误:wait是一个保留字

这是我第一次使用async/await,所以我可能用错了方法。我的目标是按顺序运行que unique测试(findOne),如果一切正常,则保存新的寄存器。

共有1个答案

张砚
2023-03-14

错误是因为您试图等待某件事,但没有声明函数异步。我没有用猫鼬测试这个,但是它看起来像这样。

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;
  }
};
 类似资料:
  • 问题内容: 我有一对多关系的两个表。假设对于表格中的每一行,表格中可以有0或更多行引用。 客户想要知道引用某行中有多少行,对于中的所有行。 我可以使用以下查询完成此操作: 但是,如果表和很大,该怎么办?假设有100万行,并且有1000万行。我们还要说,其中99%的行的引用计数少于1000行。假设客户通常一次请求大约100行。 我应该将朴素的count()查询与外键上的索引一起使用,还是最好保留一个

  • 为了便于编程,CodeIgniter使用了一系列的函数和名称来完成操作。所以,有些名称不能被程序员使用。下面是不能被程序员使用的保留字列表。 控制器 因为你的控制器类将继承主程序控制器,所以你的函数命名一定不能和主程序控制器类中的函数名相同,否则你的局部函数将会覆盖他们。下面列出了已经保留的名称,请不要将你的控制器命名为这些: Controller CI_Base _ci_initialize D

  • Javascript 保留字 abstract boolean byte char class const debugger double enum export extends final float goto implements import int interface long native package private protected public short static sup

  • SQL 保留字 ABCDEFGHIJKLMNOPQRSTUVWXYZ 下表包括了所有 Microsoft Jet 数据库引擎保留的用于 SQL 语句的字。列表中的字,若不是全部大写,也被其它应用程序所保留。因此,对于这些字的各个帮助主题只提供了通常的描述,并未着重 SQL的用法。 注意 跟着一星号 * 的词是被保留的,但是当前在 Microsoft® Jet SQL 语句的范畴内并没有意义(例如,

  • 在JavaScript中有没有办法删除字符串的结尾? 我只需要保留字符串的前8个字符,并删除其余字符。

  • 问题内容: 我刚刚s在以下lambda表达式中替换为_: Eclipse编译器说: ‘_’不应用作标识符,因为它是源级别1.8以后的保留关键字。 我没有在JLS§3.9词法结构/关键字中找到任何解释。 问题答案: 看的地方是JLS§15.27.1。Lambda参数 如果lambda参数具有名称_(即单个下划线字符),则是编译时错误。 不建议在任何上下文中使用变量名_。Java编程语言的未来版本可能