sqlite3callback(node.js)

我试图将我网站上input的电子邮件与数据库中的电子邮件进行比较,看看它是否已经存在。 如果是,则该函数返回false,并显示一个错误。

var db = new sqlite3.Database('users_db.db'); db.get( "SELECT * FROM users WHERE useremail = ?", [email], function (err, rows) { if (rows == undefined ){ global.returnvalue2 = false; } } ); 

我想要的是在select后立即运行该函数,以便返回值为false,并且不创build用户logging。

现在我意识到这个callback在所有事情之后都会被调用,所以它只是在整个程序的其余部分进行select和继续,直到结束。

我怎样才能检查是否有任何相同的电子邮件logging?

利用JavaScript中的asynchronousfunction,所以你的代码看起来像这样;

 var db = new sqlite3.Database('users_db.db'); function checkemail(email, cb) { db.get( "SELECT * FROM users WHERE useremail = ?", [email], function (err, rows) { if (err || rows == undefined ){ cb("bad email", null) } else { cb(null,rows) } }); } function checkpassword(pw,cb) {....} function checkclass(cls,cb) {....} 

然后写你这样的代码;

 checkemail(myemail, function(err,rows) { if (err) return alert(err); checkpassword(pw, function(err, msg) { if (err) return alert(err); checkclass(cls, function(err, msg) { if (err) return alert(err); alert("Congratulation you passed all the checks"); }); }); }); 

这是我做的一个小小的

 const sqlite3 = require('sqlite3').verbose(); let db = new sqlite3.Database('iHacks.db'); function get_user_credentials (email, password) { return new Promise((rs, rj) => { function callback (err, User) { if (err) rj(err); rs(User); } db.get('select * from users where email=? and password=?', [email, password], callback); }); } function login (email, password) { return new Promise ((rs, rj) => { // Hashing the password. password = sha256(password + 'EzSalt'); // Creating an Error const err = new Error('Email or password did not match!'); // Callback functions function check (User) { rs(User); } function fail (err) { rj(err); } // Getting the user credentials get_user_details(email, password).then(check).catch(fail); }); } login() .then(/* Continue code */) .catch(err => {throw new Error(err); }) ;