无法理解ASYNC npm包中的ASYNC系列

时间:2015-07-20 05:06:41

标签: node.js asynchronous mongoose

您好我想从我的API中删除 ASYNC OF HELL 。我遇到了一个npm包,即 async ,它提供了名为 async series 的选项。所以我在我的API中尝试了它,我正在制作一个普通的Register表单,它从用户获取电子邮件,firstName,LastName和密码,并使用节点检查器插入断点以查看其工作情况。我使用DHC发布了我的数据。我的API无法提供所需的输出,也没有发布错误。我的代码如下

   function email_verification(callback) {
        User.find(email, function (err, data) {
            if (err) {
                callback(err);
            }
        });
    }
    function hashing_password(callback) {
        bcrypt.genSalt(SALT_WORK_FACTOR, function (err, salt) {
            if (err) {
                callback(err);
            }
            bcrypt.hash(password, salt, function (err, hash) {
                if (err) {
                    callback(err);
                }
            });
        });
    }
    function saving_user(callback) {
        password = hash;
        delete param.password;
        param.password = password;
        var user_details = db.User(param);

        user_details.save(param, function (err, data) {
            if (err) {
                callback(err);
            } else {
                delete data._doc.password;
                return res.json({
                    success: true,
                    user_details: data
                });
            }
        });
    }
    async.series([
                    email_verification,
                    hashing_password,
                    saving_user
                ], function (err) {
        if (err.name != null) {
            if (err.name === "ValidationError") {
                return res.json({
                    success: false,
                    exception: "ERROR.USER.ALREADY.EXISTS"
                });
            } else if (err) {
                return res.json({
                    success: false,
                    exception: err
                });
            } else {
                return res.json({
                    success: true,
                    details: err
                });
            }
        }
    });

我的API流程如下:

  1. 我检查电子邮件ID 是否存在。如果它存在,那么我给 错误表示电子邮件ID存在
  2. 如果电子邮件ID 不存在,那么我哈希 给定密码,我存储电子邮件, mongoDB中的firstName,lastName和哈希密码。
  3. 有人可以告诉我我在哪里弄错了吗?

1 个答案:

答案 0 :(得分:2)

您也需要在成功案例中调用函数callback(不仅仅是错误案例)。

例如:

function email_verification(callback) {
    User.find(email, function (err, data) {
        if (err) {
            callback(err);
        } else {
            callback(err, data);
        }
    });
}

您可以简化为:

function email_verification(callback) {
    User.find(email, callback);
}