异步但顺序请求的模式

时间:2015-06-30 22:06:41

标签: node.js asynchronous recursion

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

总结一下问题:

  1. 我有一个以我需要处理的数组格式存储的数据列表。
  2. 我必须异步将此数据发送到服务,但该服务一次只能接受一些。
  3. 必须按顺序处理数据以满足服务限制,这意味着不允许进行多个并行异步请求
  4. 在这个领域工作,我提出的最简单的模式是递归模式。像

    这样的东西
    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 个答案:

答案 0 :(得分:0)

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