nodejs redis Q promises,如何让它工作?

Gie*_*ius 8 redis node.js promise q

我试图从redis中获取一些值,将它们组合起来并最终发送.但我无法让这些承诺奏效.

这是getredis 的简单功能

client.get('user:1:id',function(err,data){
    // here I have data which contains user ID
});
client.get('user:1:username',function(err,data){
    // here I have data which contains username
});
Run Code Online (Sandbox Code Playgroud)

现在我想IDusername和送他们,但我不知道如何使这项工作.我设法使它与回调一起工作,但它是非常混乱的结果,所以然后我试图将匿名函数包装到Q.fcall和调用后.then看起来像那样

client.get('user:1:id',Q.fcall(function(err,data){
    return data;
}).then(function(val) {
   // do something
}));
Run Code Online (Sandbox Code Playgroud)

但是,由于太多的论点被传递,这给了我错误,我甚至不确定这是否会帮助我,即使它会起作用.

Dan*_* D. 10

Q.all([Q.ninvoke(client, 'get', 'user:1:id'),
       Q.ninvoke(client, 'get', 'user:1:username')]).then(function (data) {
  var id = data[0];
  var username = data[1];
  // do something with them
});
Run Code Online (Sandbox Code Playgroud)

请参阅https://github.com/kriskowal/q#adapting-node

  • 你可以使用Q.spread来挤出更多.Q.spread([Q.ninvoke(client,"get","user:1:id"),Q.ninvoke(客户端,"get","user:1:username"],function(id,username){ }). (4认同)