异步瀑布在特定函数Node.js中执行了两次

异步瀑布在特定函数Node.js中执行了两次,node.js,asynchronous,waterfall,Node.js,Asynchronous,Waterfall,这是我的异步瀑布代码 var checkData = function (datas, callback) { pool.getConnection(function (err, conn) { if(err) { // DB connection error var error = 'DB_connection_error'; callback(err, error); } else { var sql = 'SE

这是我的异步瀑布代码

var checkData = function (datas, callback) {
pool.getConnection(function (err, conn) {
    if(err) {
        // DB connection error
        var error = 'DB_connection_error';
        callback(err, error);
    } else {
        var sql = 'SELECT COUNT(*) AS cnt FROM member WHERE email=?';
        conn.query(sql, datas[0], function (err, row) {
            var cnt = row[0].cnt;
            if(err) {
                // DB query error
                var error = 'checkData_error';
                conn.release();
                callback(err, error);
            } else {
                if(cnt == 1) {

                    var error = 'userEmail_duplicated';
                    conn.release();
                    callback(error, error);
                } else {
                    conn.release();
                    callback(null, datas, callback);
                }
            }
        });
    }
});}

var registMember = function (datas, callback) {
pool.getConnection(function (err, conn) {
    if(err) {
        // DB connection error
        var error = 'DB_connection_error';
        callback(err, error);
    } else {
        var sql = 'INSERT INTO member (email, birth, sex, push_id, pw) VALUES(?, ?, ?, ?, ?)';
        conn.query(sql, datas, function (err, row) {
            if(err) {
                var error = 'registMember_error';
                conn.release();
                callback(err, error);
            } else {
                if(row.affectedRows == 1) {
                    var result = true;
                    conn.release();
                    callback(null, result);
                } else {
                    var error = 'unknown_error';
                    conn.release();
                    callback(error, error);
                }
            }
        });
    }
});}

exports.register = function (datas, callback) {
async.waterfall([
    function (callback) {
        checkData(datas, callback);
    }, function (datas, callback) {
        registMember(datas, callback);
    }], function (err, result) {
        if(err) console.log('err : ', err);
        callback(result);
    }
);}
在async.瀑布中,第二个函数(registMember)执行两次。 在第一次执行中,效果很好 然而,在此之后,数据的步长值为真

瀑布函数只有一个回调,但它是错误的。 然而,insert查询在第一步工作正常,mysql数据以DB为单位

为什么瀑布式调用特定函数两次


很抱歉我的英语很短。

您正在以param形式发送第一个回调:“callback(null,datas,callback);”,请尝试将其更改为“callback(null,datas);”。哦,我解决了它!!谢谢。我不知道为什么我看不出这个错误。