这是我的原始代码,用于获取存储在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)
{
session_obj = PHPUnserialize.unserializeSession(data);
}
/* ... other functions ... */
})
我想用Promise重写代码,但无法获得data
返回的代码:
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);
})
在session
返回的只是布尔true
而不是会话数据。原始redis get
函数有两个参数。我以为诺言刚刚返回err
了原始的第一个参数。所以我尝试了
Promise.resolve(session.get('PHPREDIS_SESSION:'+key)).then(function(err,data){
console.log(data) // return undefined
})
但它也不起作用。
有人知道redis是否可以与Promise合作吗?
您尝试使用Promise.resolve
错误,它期望Promise,并且session.get
默认情况下不会返回Promise。您首先需要使它散布。(或promisifyAll)
session.getAsync = Promise.promisify(session.get);
// OR
Promise.promisifyAll(session); //=> `session.getAsync` automatically created
// OR
Promise.promisifyAll(redis); //=> Recursively promisify all functions on entire redis
然后使用新函数返回承诺,就像使用承诺一样,您甚至不需要用Promise.resolve包装它,只需:
session.get('PHPREDIS_SESSION:' + key).
then(function(data) {
// do something with data
}).
catch(function(err) {
// handle error with err
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句