NodeJS函数内返回true/false

3
我目前有这样的代码
function userExists(userID) {
   connection.query(query, function(error, results, fields) {
       if(results.length > 0) {
           return true;
       }
       return false;
   });
}

如果找到结果则返回 true,否则返回 false 是我的意图。由于在函数内部返回了一个函数,所以这种方式行不通。我该如何解决,以便仍然可以使用 if(userExists(id)) { code }


1
很抱歉,这个无法在简单的JS中实现,因为connection.query需要一些时间来处理,因此userExists()函数应该是阻塞的。但是JS不支持任何阻塞操作,据我所知。所以,您应该使userExists接受回调并采用异步风格。 - yeputons
1
可能是重复的问题,参考如何使用node.js使函数等待回调被调用 - yeputons
1
可能是异步调用如何返回响应?的重复问题。 - Ben Fortune
1个回答

3

您需要使用Promise或回调函数。以下是使用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.
}

如果您正在运行 Node,那么您可能可以使用 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);
});

哥们儿,非常感谢,这正是我在寻找的,不过我修复了ES6版本,有一个括号丢失了,还有一个多余的}。 - Johnson Doe
@JohnsonDoe 谢谢。如果你感兴趣,我也添加了一个使用回调函数的示例来展示如何完成这个任务。 - Mico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接