2015-06-30 46 views
1

我最近写了很多NodeJS,这迫使我从不同的角度来攻击一些问题。我想知道在异步请求环境中,为了处理数据块的顺序(而不是并行)问题开发了哪些模式,但我一直无法找到任何直接相关的东西。异步但顺序请求的模式

所以总结一下问题:

  1. 我有存储在我需要处理数组格式的数据的列表。
  2. 我必须将这些数据异步发送到服务,但该服务一次只能接受几个服务。
  3. 的数据必须按顺序进行处理,以满足对服务的限制,这意味着使多个并行异步请求是不允许的

在这一领域的工作,我已经拿出了最简单的模式是递归的。类似于

function processData(data, start, step, callback){ 
    if(start < data.length){ 
    var chunk = data.split(start, step); 
    queryService(chunk, start, step, function(e, d){ 
     //Assume no errors 
     //Could possibly do some matching between d and 'data' here to 
     //Update data with anything that the service may have returned 
     processData(data, start+step, step, callback); 
    }); 
    } 
    else{ 
    callback(data); 
    } 
} 

从概念上讲,这应该贯穿每个项目,但它很直观地复杂。我觉得应该有一个更简单的方法来做到这一点。在接近这种问题时,有没有人有他们倾向于遵循的模式?

+1

你可以通过'async#eachSeries'避免递归https://github.com/caolan/async#seriestasks-callback – hassansin

回答

0

我的第一个思考过程是依靠对象封装。创建一个对象,其中包含有关需要处理的所有信息以及有关正在处理和正在处理的内容的所有相关数据,并且回调函数将仅调用该对象的“下一个”函数,这将反过来开始处理下一段数据并更新对象。基本上像n异步for循环一样工作。