您將需要使用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) –