经过很长一段时间的“不......我不想这样做......”我终于需要使用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 );
}
});
}
答案 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 );
}
});
}