我在使用 Node.js / node-postgres lib / PostgreDB 实现 RESTful 服务时遇到了两个问题,这两个问题都是由于 JS 的异步特性造成的。
A) 我需要在client.query(query, callback)调用中向回调传递一个额外的参数
我在查询的回调中,并通过最近从数据库中获取的行的数组,并希望为每个行启动后续查询:
var query = client.query('SELECT * FROM event', queryAllEventsHandler);
function queryAllEventsHandler(err, result){
allEvents = result.rows;
/* allEvents is an JSON array with the following format
[ {"id_event":1, "name":"name of the event"},
{"id_event":1, "name":"name of the event"}
]
*/
for(var i = 0; i<allEvents.length; i++){
client.query('SELECT * FROM days where id_event = $1',[allEvents[i].id_event], function( err, result){
//I want to have a reference to variable i
}
}
在上面的示例中,我想做类似的事情:
client.query('SELECT * FROM days where id_event = $1',[allEvents[i].id_event], function( AN_EXTRA_ARG, err, result)
AN_EXTRA_ARG 是回调函数中的额外参数或闭包......我怎样才能实现这一点?我应该使用 of i创建一个闭包并将其作为回调的 arg 传递吗?如何 ?:|
B)“同步”查询
我需要启动各种查询并从所有查询中创建自定义 JSON。由于每个查询及其回调都是异步的(不等待任何人),我一直在寻找一种“驯服”它的方法,除此之外,我发现了一个首先出现在我身上的解决方案,但似乎有点“糟糕/糟糕” “:保持查询计数真的是@jslatts在使用 Node.js 进行同步数据库查询中建议的方法吗?
希望我