anchor.diff:  sequenceTasks(tasks);
   ----
   
  -=== 逐次処理を行う関数を定義する
  +=== 定义进行顺序处理的函数
   
  -基本的には、<<promise-reduce-xhr.js,reduceを使ったやり方>>を関数として切り離せばいいだけですね。
  +基本上我们只需要基于 <<promise-reduce-xhr.js,使用reduce的方法>> 重构出一个函数。
   
   [source,javascript]
   [[promise-sequence.js]]
  
positive.code: include::embed/embed-promise-sequence.js[]
  ----
  
  一つ注意点として、`Promise.all` 等と違い、引数に受け取るのは関数の配列です。
  
  何故、渡すのがpromiseオブジェクトの配列ではないのかというと、
  promiseオブジェクトを作った段階で既にXHRが実行されている状態なので、
  それを逐次処理しても意図とは異なる動作になるためです。
  
  そのため `sequenceTasks` では関数(promiseオブジェクトを返す)の配列を引数に受け取ります。
  
  最後に、`sequenceTasks` を使って最初の例を書き換えると以下のようになります。
  
  [role="executable"]
  [source,javascript]
  
negative.code: });
  ----
  
  使用for循环的时候，如同我们在 <<then-return-new-promise,专栏: 每次调用then都会返回一个新创建的promise对象>> 以及 <<promise-and-method-chain,Promise和方法链>> 中学到的那样，每次调用 <<promise.then, Promise#then>> 方法都会返回一个新的promise对象。
  
  因此类似 `promise = promise.then(task).then(pushValue);` 的代码就是通过不断对promise进行处理，不断的覆盖 `promise` 变量的值，以达到对promise对象的累积处理效果。
  
  但是这种方法需要 `promise` 这个临时变量，从代码质量上来说显得不那么简洁。
  
  如果将这种循环写法改用 `Array.prototype.reduce` 的话，那么代码就会变得聪明多了。
  
  === Promise chain和reduce
  
  如果将上面的代码用 `Array.prototype.reduce` 重写的话，会像下面一样。
  
  [role="executable"]
  [source,javascript]
  