Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Bluebird Promise能否与node.js中的redis配合使用?_Javascript_Node.js_Redis_Promise_Bluebird - Fatal编程技术网

Javascript Bluebird Promise能否与node.js中的redis配合使用?

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)

以下是获取存储在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.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
});