使用 Async.js 查询三条 SQL 语句并返回结果:
var sqls = { table_a: "select count(*) from table_a", table_b: "select count(*) from table_b", table_c: "select count(*) from table_c" }; async.map(sqls, function(item, callback) { connection.query(item, function(err, results) { callback(err, results); }); }, function(err, results) { if(err) { console.log(err); } else { console.log(results); } }); 可以输出:
{ table_a: [ { 'count(*)': 26 } ],
table_b: [ { 'count(*)': 3 } ],
table_c: [ { 'count(*)': 2 ] }
根据 map 函数的文档:
arr - An array to iterate over.
iterator(item, callback) - A function to apply to each item in arr. The iterator is passed a callback(err, transformed) which must be called once it has completed with an error (which can be null) and a transformed item.
callback(err, results) - Optional A callback which is called when all iterator functions have finished, or an error occurs. Results is an array of the transformed items from the arr.
connection.query 函数符合第二个参数 iterator(item, callback)。
为什么以下的使用方式会报错:
var sqls = { table_a: "select count(*) from table_a", table_b: "select count(*) from table_b", table_c: "select count(*) from table_c" }; async.map(sqls, connection.query, function(err, results) { if(err) { console.log(err); } else { console.log(results); } }); TypeError: Cannot read property 'typeCast' of undefined 