代码之家  ›  专栏  ›  技术社区  ›  J. Defenses

节点JS,NeDB-如何使同步返回到父模块

  •  0
  • J. Defenses  · 技术社区  · 6 年前

    我有职能:

    let isExistByEmail = (email) => {
        return new Promise(function (resolve) {
            db.count({email: email}, (err, n) => {
                resolve(n > 0);
            });
        }).then(result => {
            return result;
        });
    };
    

    如果我做控制台。在其中登录->将是结果。 但是,因为它是操作异步结果,所以不会返回到父模块。 我需要验证,如果电子邮件存在返回错误,但我不能。 我尝试设置setTimeout并尝试使用async Wait,但没有结果。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Deep Vora    6 年前

    我不知道你想暗示什么。但据我所知,你不会得到结果。 isExistByEmail('email@email.com') 将返回承诺,而不是您期望的布尔值。 then 返回承诺,而不是对象/变量

        2
  •  1
  •   J. Defenses    6 年前

    我找到了下一个答案:使用异步等待。

    async function isEmailExist(email) {
        let count = await new Promise((resolve, reject) => {
            db.count({email: email}, (err, count) => {
                if (err) reject(err);
                resolve(count);
            });
        });
        return count > 0;
    }
    

    通话中再次使用等待:

    async function isAccessData(req) {
        let errors = [];
    
        if (await users.isEmailExist(req.body.email) === true) {
        // doing
        }
     }