我对 Nodejs 及其异步方式不是很熟悉。 我正在尝试查询不同的 redis 数据库。
我有一个简单的函数可以从 redis 数据库中获取 key :
function get_key(client, key, db, callback) {
if (key) {
client.select(db, function(e, s) {
if (e) {
console.log('client.select err: ' + e);
} else if (s) {
client.get(key, function(e, s) {
callback(e, s);
return s;
});
}
});
}
return
我正在使用它来查询多个数据库,如下所示:
get_key(client, key1, 0, function(e, s) {
if (s) {
// do stuff with s;
} else {
debug('e: ' + e);
}
});
get_key(client, key2, 1, function(e, s) {
if (s) {
// do stuff with s;
} else {
debug('e: ' + e);
}
});
但它不工作。但是如果我为每个查询创建不同的客户端,它就可以工作。我在十几个数据库中有查询,并且不希望每次查询时都创建一个新客户端。
有更好的方法吗?我不熟悉的“Node ”方式?谢谢。
最佳答案
异步函数将回调函数作为参数。该函数接近于立即返回,并且在工作完成后调用回调而不是阻塞调用者。所以你的第一个调用在它对 redis 的调用完成之前返回并且第二个调用是立即进行的,这可能会搞砸第一个调用,因为它们共享同一个客户端。
如果您只有两个调用,简单的答案是将第二个调用放在第一个调用的回调中。如果您需要连续进行大量异步调用,请考虑使用 promises或一些可用的库,如 async .
关于javascript - Node Redis : Multiple queries in different redis databases with same client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40091308/