【问题标题】:nodejs async library and redisnodejs 异步库和 redis
【发布时间】:2014-04-18 00:12:57
【问题描述】:

在“不..我不想这样做..”很久之后,我终于需要使用 async.js 库了。

我没有胶水怎么用它会让我开心...

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

说真的..我什至不知道如何开始..任何帮助都是很好的帮助。^^

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 );

      }

    });

}

【问题讨论】:

  • 你需要了解 javascript 闭包。 See this answer 获得比我目前愿意写出的更全面的答案。一旦你掌握了这一点,异步的东西就相当简单了。

标签: node.js asynchronous redis async.js


【解决方案1】:

我确认这是一个可行的解决方案。

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 );

      }

    });

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2011-09-08
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    相关资源
    最近更新 更多