2017-02-03 69 views
0

我现在有这样的返回的NodeJS真/假内部功能

function userExists(userID) { 
    connection.query(query, function(error, results, fields) { 
     if(results.length > 0) { 
      return true; 
     } 
     return false; 
    }); 
} 

我的意图的代码是,如果结果被发现有这种回报为真,假,如果它没有。这不起作用,因为返回一个函数内部的功能,我将如何解决这个问题,所以我仍然可以这样做if(userExists(id)) { code }

+1

恐怕这不能在简单的JS中完成,因为'connection.query'可能需要一些时间来处理,所以'userExists()'函数应该被阻塞。但JS不支持任何阻塞操作,afaik。所以你应该让'userExists'接受回调并采用异步风格。 – yeputons

+1

[如何使一个函数等待,直到使用node.js调用回调](http://stackoverflow.com/questions/5010288/how-to-make-a-function-wait-until-a -callback-has-called-using-node-js) – yeputons

+1

可能的重复[如何从异步调用返回响应?](http://stackoverflow.com/questions/14220321/how-do-i -return-the-an-asynchronous-call) –

回答

1

您将需要使用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); 
}); 
+0

嘿,男士,谢谢你,这正是我正在寻找的东西,我修正了ES6版本,但有一个缺失)和一个额外的}。 –

+0

@JohnsonD​​oe谢谢。我还添加了一个示例,如果您有兴趣,您将如何使用回调函数来执行此操作。 – Mico