异步瀑布在特定函数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);”。哦,我解决了它!!谢谢。我不知道为什么我看不出这个错误。