您将需要使用Promise或回调函数..下面是一个示例如何实现使用承诺的功能:
function userExists(userID) {
return new Promise(function(resolve, reject) {
connection.query(query, function(error, results, fields) {
resolve(results.length > 0);
});
}
}
userExists(1).then(function(result) {
// Here result will be either true or false.
}
你也许可以使用ES6语法,如果你正在运行的节点,所以你也可以写
const userExists = userID => new Promise((resolve, reject) => {
connection.query(query, (error, results, fields) => {
resolve(results.length > 0);
});
});
userExists(1).then(result => {
console.log(result);
});
编辑:
如果你出于某种原因需要使用回调函数来实现这个功能,那么你应该如何去做。尽管使用Promise是首选。
const userExists = (id, callback) => {
connection.query(query, (error, results, fields) => {
callback(results.length > 0);
});
}
userExists(1, result => {
console.log(result);
});
恐怕这不能在简单的JS中完成,因为'connection.query'可能需要一些时间来处理,所以'userExists()'函数应该被阻塞。但JS不支持任何阻塞操作,afaik。所以你应该让'userExists'接受回调并采用异步风格。 – yeputons
[如何使一个函数等待,直到使用node.js调用回调](http://stackoverflow.com/questions/5010288/how-to-make-a-function-wait-until-a -callback-has-called-using-node-js) – yeputons
可能的重复[如何从异步调用返回响应?](http://stackoverflow.com/questions/14220321/how-do-i -return-the-an-asynchronous-call) –