Node.js和mysql回调

时间:2017-05-15 22:02:18

标签: javascript mysql node.js

我是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);
        }
    });
}

1 个答案:

答案 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旨在打击可怕的回调地狱。