我正在嘗試檢查具有給定電子郵件 ID 的用戶是否以前注冊過。如果是,則名為 的變數uniqueUser設定為false。但是,即使條件為 ,此變數也保持不變true。它的值在本地發生變化,但是一旦 promise 被解決,值就會恢復到以前的值。
以下是代碼:-
router.post('/register-user', multer_profile_pic.any(), (req, res, next) => {
var uniqueUser = true; //----> This value is being focused
const user = req.body;
var query = `SELECT * FROM users WHERE email=$1`;
var values = [user.email];
db.query(query,values)
.then(result => {
if(result.rowCount > 0) {
uniqueUser = false;
console.log("uniqueUser=" uniqueUser); //----> Here value becomes false
}
})
.catch(err => {
uniqueUser=false;
});
if(uniqueUser) {
console.log(uniqueUser); //----> Here value becomes true
//INSERT QUERY HERE
}
const josn_resp = {
response: response,
message:message
}
res.json(josn_resp);
});
uj5u.com熱心網友回復:
出現這個問題是因為你不了解 Promise 事件回圈是如何作業的。
在您的代碼中db.query(query,values)并if(uniqueUser) {在事件回圈中同時執行,實際上您的變數uniqueUser從未改變。
你應該改變你的代碼,如下所示:
router.post('/register-user', multer_profile_pic.any(), (req, res, next) => {
var uniqueUser = true; //----> This value is being focused
const user = req.body;
var query = `SELECT * FROM users WHERE email=$1`;
var values = [user.email];
db.query(query, values)
.then(result => {
if (result.rowCount > 0) {
uniqueUser = false;
console.log('uniqueUser=' uniqueUser); //----> Here value becomes false
}
if (uniqueUser) {
console.log(uniqueUser); //----> Here value becomes true
//INSERT QUERY HERE
return db.query('insert-query');
}
return Promise.resolve();
})
.then(() => {
const josn_resp = {
response: response,
message: message,
};
res.json(josn_resp);
})
.catch(err => {
res.status(400);
res.json({message: err.message})
});
});
如果您使用 nodeJs 12 及更高版本,我建議使用async/await:
router.post('/register-user', multer_profile_pic.any(), async (req, res, next) => {
const user = req.body;
try {
const result = await db.query(`SELECT * FROM users WHERE email=$1`, [user.email]);
if (result.rowCount === 0) {
await db.query('insert-query');
}
const josn_resp = {
response: response,
message: message,
};
res.json(josn_resp);
} catch (err) {
res.status(400);
res.json({message: err.message})
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/415488.html
標籤:
下一篇:PostgreSQL更新耗時過長
