javascript - 在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
永远不会更新。
解决方案
为了在别处使用该值,最好的方法是返回一个包含初始查询的 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.
}
推荐阅读
- regex - htaccess:在没有循环的情况下将文章重定向更深一层
- ios - 如何从反应原生桥将参数传递给swift类
- c - 在C中使用指针的奇数或偶数
- r - 数据框中行的余弦相似度
- javascript - 如何设置比例淡入淡出反向?
- mysql - 如何查询Mysql文本列
- node.js - net::ERR_CONNECTION_RESET 上传图片
- python - 将 HTML 转换为纯文本,同时保留分区的确切位置
- botframework - 如何扩展声明性自适应对话模式?
- hyperledger-fabric - 我正在尝试在超级账本结构上实例化用 node.js 编写的链码,但出现错误