我是node.js和callbacks的新手。我必须根据用户的搜索配置搜索4个不同的表格。可能有最多4个搜索查询。例如:
Table-1
city
Table-2
country
Table-3
diet
Table-4
product
如果用户的配置包含城市和国家/地区名称,那么我需要在表-1和表-2中进行搜索。如果我在任何表中找到任何相关信息,我需要返回true并停止检查其余表。如果我在任何表格中都找不到相关信息,我需要返回false。
Mysql连接器:" mysql":" ^ 2.13.0" 伪代码:
function search(searchTerm, type, cb) {
if (type=="city") {
searchDB(searchTerm, "city", "fct", function (result) {
if (result == true) cb(result)
});
}
if (type=="country") {
searchDB(searchTerm, "country", "fcy", function (result) {
if (result == true) cb(result)
});
}
if (type=="diet") {
searchDB(searchTerm, "diet", "fdt", function (result) {
if (result == true) cb(result)
});
}
if (type=="product") {
searchDB(searchTerm, "product", "fpt", function (result) {
if (result == true) cb(result)
});
}
}
function searchDB(searchTerm, tableName, fieldName, cb) {
var qryParams;
var qry = 'SELECT * from ?? where ??=?';
qryParams = [tableName, fieldName, searchTerm];
qry = mysql.format(qry, qryParams);
connection.query(qry, function (error, results, fields) {
if (error) throw error;
if (results == "") {
return cb(false);
} else {
return cb(true);
}
});
}
答案 0 :(得分:0)
在您的情况下,您应该使用Promise.race()
功能。没有在这里发布整个示例,因为在MDN页面上显示了一个很好的完整示例。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race
Promise.race([p3, p4]).then(function(value) {
console.log(value); // "three"
// p3 is faster, so it resolves
}, function(reason) {
// Not called
});
EDIT。刚刚意识到你可能没有使用承诺......阅读一下它们,Promises旨在打击可怕的回调地狱。