nodejs异步库和redis

时间:2014-04-17 10:45:43

标签: node.js asynchronous redis async.js

经过很长一段时间的“不......我不想这样做......”我终于需要使用async.js库了。

我没有胶水如何以一种让我开心的方式使用它......

让我们考虑这个非常简化的伪函数:

Seriosly ..我甚至不知道如何开始..任何一种帮助都会有很好的帮助。^^

getOPGdata( socket, [ 'url1', 'url2', 'url3', 'url3' ], 'requestid-5364356' );

function getOPGdata( socket, urls, id ){

  var results = {};
  results[id] = [];

  urls.forEach( function( url ) {

    url = trim( url );

    redis.hgetall( 'ogp:'+url, function ( err, reply ) {

      if( reply ) { 

        results[id].push( reply );

      } 

      else {

        results[id].push( refreshOPGcache( url ) );

      }

    });

  });

  socket.emit('ogp', results );

}

refreshOPGcache( url ){

  redis.hgetall( 'cache:'+url, function ( err, reply ) {

    return reply;

  }

}

编辑:

这是正确的方法吗?

function getOPGdata( socket, urls, id ){


  var results = {};
  results[id] = [];

  async.map( urls, getOGPfromCache, function(err, r){

    results[id] = r;
    console.log( results );

  });

}

function getOGPfromCache( url, callback ){

    redis.hgetall( 'ogp:'+url, function ( err, reply ) {

      if( err ){ callback( null, false ); }

      if( reply ) { 

        callback( null, reply );

      } 

      else {

        getFreshOPGdata( url, callback );

      }

    });

}

function getFreshOPGdata( url, callback ){

    redis.hgetall( 'justademo:'+url, function ( err, reply ) {

      if( err ){ callback( null, false ); }

      if( reply ) { 

        callback( null, reply );

      } 

      else {

        callback( null, false );

      }

    });

}

1 个答案:

答案 0 :(得分:0)

我确认这是一个有效的解决方案。

function getOPGdata( socket, urls, id ){


  var results = {};
  results[id] = [];

  async.map( urls, getOGPfromCache, function(err, r){

    results[id] = r;
    console.log( results );

  });

}

function getOGPfromCache( url, callback ){

    redis.hgetall( 'ogp:'+url, function ( err, reply ) {

      if( err ){ callback( null, false ); }

      if( reply ) { 

        callback( null, reply );

      } 

      else {

        getFreshOPGdata( url, callback );

      }

    });

}

function getFreshOPGdata( url, callback ){

    redis.hgetall( 'justademo:'+url, function ( err, reply ) {

      if( err ){ callback( null, false ); }

      if( reply ) { 

        callback( null, reply );

      } 

      else {

        callback( null, false );

      }

    });

}