繁体   English   中英

Javascript function 更改变量值

[英]Javascript function change variable value

我目前正在开发注册页面,我想检查数据库中是否已经存在 email 地址。

var emailnum = email_num(`select * from contactinfo where email='${email}'`);
        console.log(emailnum); //the output presents Promise { <pending> } not a num.

function sqlExecute(q) {
    return new Promise((resolve, reject) => {
            db.pool.query(q, function(err, result) {
                if (err) {
                    console.log("ERROR ON " + q+"\n");
                    reject(err)
                }
                console.log("SUCCESS ON " + q);
                resolve(result);
            })
        })
        .catch(err => {
            console.log(err);
        })
}

//run check sql
async function email_num(tempquery){
   var result = await sqlExecute(tempquery);
   return result.rowCount;
}

我尝试了多种方法,但仍然无法弄清楚。 我将不胜感激任何帮助 TT

当我 console.log 时,output 总是 Promise { }。 我试过了

var emailnum = email_num(`select count(*) as count from contactinfo where email='${email}'`)
.then((val)=>{
return val
};
console.log("number"+ emailnum);

这里的问题是,在尝试检索行数之前,您不允许 promise 解决。 当您使用async创建 function 时,返回结果始终是 promise。 这里有一些解决方案可以让您获得想要的结果:

解决方案1:使用console.log打印promise解决后的结果。

const email = 'something@gmail.com'
const numOfEmailsQuery = `SELECT * FROM contactinfo WHERE email = '${email}'`

email_num(numOfEmailsQuery)
  .then(console.log)
  .catch(console.error)

解决方案 2:在async function 中使用await来解析 promise 的结果并将其存储在变量中。 然后使用console.log打印结果

async function printNumberOfEmails(email) {
  const numOfEmailsQuery = `SELECT * FROM contactinfo WHERE email = '${email}'`
  try {
    const numOfEmails = await email_num(numOfEmailsQuery)
    console.log(numOfEmails)
  } catch (err) {
    console.error(err)
  }
}

const email = 'something@gmail.com'
printNumberOfEmails(email)

希望有帮助! 祝你好运!

首先,最好使用准备好的语句。

此外,您应该只关心计数,因此不要select * ,而是将select count(*) as count 然后你需要检查result返回的行数或行的第一个索引,然后是它的count属性。

它应该看起来像这样

function fetchEmailExists(email) {
    const statement = 'select count(*) as count from contactinfo where email = $1';
    return new Promise((resolve, reject) => {
            db.pool.query(statement, [ email ], function(error, result) {
                if (!error && result.rows.length > 0) {
                    resolve(result.rows[0]['count'] > 0);
                } else {
                    reject(error);
                }
            });
        })
        .catch(error => {
            console.log(error);
        });
}

// Here is your call to fetchEmailExists
fetchEmailExists('test123@example.com')
  .then(boolean => console.log(boolean));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM