Javascript Bluebird Promise能否与node.js中的redis配合使用?
以下是获取存储在redis中的用户php会话的原始代码:Javascript Bluebird Promise能否与node.js中的redis配合使用?,javascript,node.js,redis,promise,bluebird,Javascript,Node.js,Redis,Promise,Bluebird,以下是获取存储在redis中的用户php会话的原始代码: var session_obj; var key = socket.request.headers.cookie.session session.get('PHPREDIS_SESSION:'+key,function(err,data){ if( err ) { return console.error(err); } if ( !data === false)
var session_obj;
var key = socket.request.headers.cookie.session
session.get('PHPREDIS_SESSION:'+key,function(err,data){
if( err )
{
return console.error(err);
}
if ( !data === false)
{
session_obj = PHPUnserialize.unserializeSession(data);
}
/* ... other functions ... */
})
我想重新编写代码,但无法返回数据
:
Promise.resolve(session.get('PHPREDIS_SESSION:'+key)).then(function(data){
return data;
}).then(function(session){
console.log(session); // this returns true, but not the session data
session_obj = PHPUnserialize.unserializeSession(session);
}).catch(function(err){
console.log(err);
})
会话
只返回布尔值true
,而不是会话数据。原始的redis get
函数有两个参数。我假设promise刚刚返回了第一个参数,在原始参数中是err
。所以我试过了
Promise.resolve(session.get('PHPREDIS_SESSION:'+key)).then(function(err,data){
console.log(data) // return undefined
})
但它也不起作用
有人知道redis是否可以使用Promise吗?您试图使用的是Promise。解决错误,它需要Promise和会话。默认情况下,get不会返回Promise。你首先需要做的是。(或) 然后使用新函数返回承诺,就像使用承诺一样,您甚至不需要用承诺来包装它。解决方法如下:
session.get('PHPREDIS_SESSION:' + key).
then(function(data) {
// do something with data
}).
catch(function(err) {
// handle error with err
});
实际上,您可以使用
promisifyAll(require(“redis”)
让Bluebird创建redis
模块中声明的所有函数的异步版本。只需使用后缀为Async
的原始函数名即可。
session.get('PHPREDIS_SESSION:' + key).
then(function(data) {
// do something with data
}).
catch(function(err) {
// handle error with err
});