如何用映射函数控制串行和并行控制流?

时间:2015-10-26 15:27:36

标签: node.js asynchronous concurrency

我画了一个简单的流程图,它基本上从互联网抓取一些数据并将它们加载到数据库中。到目前为止,我曾认为我对承诺很和平,但现在我有一个问题,我至少工作了三天没有一个简单的步骤。

以下是流程图:

考虑一下这样的静态字符串数组:const courseCodes = ["ATA, "AKM", "BLG",... ]

我有一个fetch函数,它基本上是一个HTTP请求,然后是解析。之后它返回一些对象数组。

fetch与使用预期的对象数组调用它的回调非常有效,它甚至可以与Promises一起使用,这种方式更加整洁。

应该使用fetch数组中的每个元素作为参数调用

courseCodes函数。此任务应该在并行执行中执行,因为那些单独的fetch函数不会相互影响。

因此,回调(或results s resolve参数)中应该有一个Promise数组,其中包含一组对象数组。有了这些结果,我应该使用loadCourse数组中的那些对象作为参数调用我的results。这些任务应该在串行执行中执行,因为它基本上是在存在类似对象时查询数据库,如果不存在则添加它。

如何在node.js中执行此类任务?我不能在这样的场景中维护异步流程。我使用caolan/async库和bluebird& q承诺图书馆。

1 个答案:

答案 0 :(得分:1)

尝试这样的事情,如果你能理解这一点:

<div class="pagination full">
  <span class="previous_page disabled">&lt; 前へ</span>
  <em class="current">1</em>
  <a rel="next" href="/student/search?page=2">2</a>
  <a href="/student/search?page=3">3</a>
  <a href="/student/search?page=4">4</a>
  <a href="/student/search?page=5">5</a>
  <a href="/student/search?page=6">6</a>
  <a href="/student/search?page=7">7</a>
  <a href="/student/search?page=8">8</a>
  <a href="/student/search?page=9">9</a>
  <span class="gap">…</span>
  <a href="/student/search?page=95">95</a>
  <a href="/student/search?page=96">96</a>
  <a href="/student/search?page=97">97</a>
  <a class="next_page" rel="next" href="/student/search?page=2">次へ &gt;</a>
</div>

或者您可以参考nimble npm模块。