Javascript Nodejs Redis:使用同一客户端在不同Redis数据库中进行多个查询

Javascript Nodejs Redis:使用同一客户端在不同Redis数据库中进行多个查询,javascript,node.js,redis,Javascript,Node.js,Redis,我对Nodejs及其异步方式不是很有经验。 我正在尝试查询不同的redis数据库 我有一个从redis数据库获取密钥的简单函数: function get_key(client, key, db, callback) { if (key) { client.select(db, function(e, s) { if (e) { console.log('client.

我对Nodejs及其异步方式不是很有经验。 我正在尝试查询不同的redis数据库

我有一个从redis数据库获取密钥的简单函数:

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);
    }
});
但它不起作用。但是如果我为每个查询创建不同的客户机,它就会工作。我在十几个数据库中都有查询,我不希望每次查询时都创建一个新的客户机


有更好的方法吗?我不熟悉的“节点”方式?谢谢。

异步函数将回调函数作为参数。函数几乎立即返回,并在工作完成后调用回调,而不是阻塞调用者。因此,您的第一个调用在其对redis的调用完成之前返回,并且第二个调用将立即进行,这可能会破坏第一个调用,因为它们共享同一个客户端


如果你只有两个电话要打,简单的答案是把第二个电话放在第一个电话的回叫中。如果需要进行大量串联异步调用,请研究使用或使用一些可用库,如。

异步函数将回调函数作为参数。函数几乎立即返回,并在工作完成后调用回调,而不是阻塞调用者。因此,您的第一个调用在其对redis的调用完成之前返回,并且第二个调用将立即进行,这可能会破坏第一个调用,因为它们共享同一个客户端


如果你只有两个电话要打,简单的答案是把第二个电话放在第一个电话的回叫中。如果需要进行大量的异步串行调用,请研究使用或使用一些可用的库,如。

那么在get_key()函数中,在调用回调函数之前执行末尾的返回?另外,在nodejs中,如果不使用任何外部模块,是否没有合适的方法来实现这一点?是的,我有很多电话要打,我最好不要使用其他库/模块。nodejs中没有办法做到这一点吗?它类似于
如果(键)启动select请求并返回,则在响应返回时继续选择,然后使用结果调用回调
。其思想是不阻塞等待I/O操作完成的节点的单个线程。您可以在不使用库的情况下将任意多的调用放入回调中,但您的代码最终可能看起来像一个巨大的方括号金字塔。这些库提高了可读性并提供了结构,而且fwiw它们不是特定于nodejs的,例如promissions也用于浏览器javascript。是的,但我对nodejs的了解还不够,我不太愿意使用其他外部框架来提高可读性。我认为,如果这是nodejs中做事情的标准方式,那么他们可能不应该将其包括在标准库中。无论如何,谢谢你。现在我将继续使用node async。那么在get_key()函数中,在调用回调函数之前执行末尾的返回?另外,在nodejs中,如果不使用任何外部模块,是否没有合适的方法来实现这一点?是的,我有很多电话要打,我最好不要使用其他库/模块。nodejs中没有办法做到这一点吗?它类似于
如果(键)启动select请求并返回,则在响应返回时继续选择,然后使用结果调用回调
。其思想是不阻塞等待I/O操作完成的节点的单个线程。您可以在不使用库的情况下将任意多的调用放入回调中,但您的代码最终可能看起来像一个巨大的方括号金字塔。这些库提高了可读性并提供了结构,而且fwiw它们不是特定于nodejs的,例如promissions也用于浏览器javascript。是的,但我对nodejs的了解还不够,我不太愿意使用其他外部框架来提高可读性。我认为,如果这是nodejs中做事情的标准方式,那么他们可能不应该将其包括在标准库中。无论如何,谢谢你。现在我将继续使用node-async。