首页 > 解决方案 > 在javascript中的回调之外赋予价值

问题描述

function doesUserExist(email){
    let sql = `SELECT * FROM USER WHERE email = "${email}"`
    var x = false;


    let exists = connection.query(sql,(error,results,fields)=>{
        if(error) throw error;
        
        if(results === undefined || results.length === 0) x = false;
        else x = true;
    });

    return x;
}

如何从回调中返回一个值,或者是否有其他模式可以用来完成同样的事情?它似乎x永远不会更新。

标签: javascriptexpress

解决方案


为了在别处使用该值,最好的方法是返回一个包含初始查询的 Promise,然后使用异步函数使用它。如果没有,您几乎无法在回调中完成所有工作。

这是使用 async/await 消费承诺的方法:

function doesUserExist(email){
  let sql = `SELECT * FROM USER WHERE email = "${email}"`

  return new Promise(function(resolve, reject) {
     connection.query(sql,(error,results,fields)=>{
        if (error) reject(error);
        resolve(results);
     });
  }
 }

然后你可以像这样使用异步函数来使用它:

async function consumeValue() {
  let results = await doesUserExist(email);

  console.log(results);
  // Do something with results.
}

推荐阅读