anchor.diff:      console.error(error);
   }
   ----
  -<1> この例外はキャッチされない
  -
  -[NOTE]
  -====
  -なぜ非同期の `callback` 内での例外をキャッチ出来ないのかは以下が参考になります。
  -
  -- http://techblog.yahoo.co.jp/programming/javascript_error/[JavaScriptと非同期のエラー処理 - Yahoo! JAPAN Tech Blog]
  -====
  -
  -<<promise-prototype-done.js,`Promise.prototype.done`>> をよく見てみると、何も `return` していないこともわかると思います。
  -つまり、`done` は「ここでPromise chainは終了して、例外が起きた場合はそのままpromiseの外へ投げ直す」という処理になっています。
  -
  -実装や環境がしっかり対応していれば、__unhandled rejection__の検知はできるため、必ずしも `done` が必要というわけではなく、
  -また今回の<<promise-prototype-done.js,`Promise.prototype.done`>>のように、`done` は既存のPromiseの上に実装することができるため、
  -<<es6-promises,ES6 Promises>>の仕様そのものには入らなかったと言えるかもしれません。
  -
  -[NOTE]
  -今回の `Promise.prototype.done` の実装は https://www.promisejs.org/[promisejs.org] を参考にしています。
  +<1> 这个例外不会被捕获
  +
  +[NOTE]
  +====
  +关于为什么异步的`callback`中抛出的异常不会被捕获的原因，可以参考下面内容。
  +
  +- http://techblog.yahoo.co.jp/programming/javascript_error/[JavaScript和异步错误处理 - Yahoo! JAPAN Tech Blog]
  +====
  +
  +仔细看一下 <<promise-prototype-done.js,`Promise.prototype.done`>>的代码，我们会发现这个函数什么也没 `return` 。
  +也就是说， `done`按照「Promise chain在这里将会中断，如果出现了异常，直接抛到promise外面即可」的原则进行了处理。
  +
  +如果实现和运行环境实现的比较完美的话，就可以进行 __unhandled rejection__ 检测，`done`也不一定是必须的了。
  +另外像本小节中的 <<promise-prototype-done.js,`Promise.prototype.done`>>一样，`done`也可以在既有的Promise之上进行实现，是否也可以说它没有进入到
  +<<es6-promises,ES6 Promises>>的设计规范之中。
  +
  +[NOTE]
  +本文中的 `Promise.prototype.done` 的实现方法参考了 https://www.promisejs.org/[promisejs.org] 。
   
   === 总结
   
  -このセクションでは、 https://github.com/kriskowal/q/wiki/API-Reference#promisedoneonfulfilled-onrejected-onprogress[Q] や https://github.com/petkaantonov/bluebird[Bluebird] や https://github.com/cscott/prfun#promisedone--undefined[prfun] 等
  -多くのPromiseライブラリで実装されている `done` の基礎的な実装と、`then` とはどのような違いがあるかについて学びました。
  -
  -`done` には2つの側面があることがわかりました。
  -
  -* `done` の中で起きたエラーは外へ例外として投げ直す
  -* Promise chain を終了するという宣言
  -
  -<<then-or-catch,then or catch?>> と同様にPromiseにより沈黙してしまったエラーについては、
  -デバッグツールやライブラリの改善等で殆どのケースでは問題ではなくなるかもしれません。
  +在本小节中，我们学习了 https://github.com/kriskowal/q/wiki/API-Reference#promisedoneonfulfilled-onrejected-onprogress[Q] 、 https://github.com/petkaantonov/bluebird[Bluebird] 和 https://github.com/cscott/prfun#promisedone--undefined[prfun] 等Promise类库提供的 `done` 的基础和实现细节，以及`done`方法和 `then` 方法有什么区别等内容。
  +
  +我们也学到了 `done` 有以下两个特点。
  +
  +* `done` 中出现的错误会被作为异常抛出
  +* 终结 Promise chain
  +
  +和 <<then-or-catch,then or catch?>> 中说到的一样，由Promise内部消化掉的错误，随着调试工具或者类库的改进，大多数情况下也许已经不是特别大的问题了。
  +
  +此外，由于 `done` 不会有返回值，因此不能在它之后进行方法链的创建，为了实现Promise方法风格上的统一，我们也可以使用`done`方法。
   
   また、`done` は値を返さない事でそれ以上Promise chainを繋げる事ができなくなるため、
   そのような統一感を持たせるという用途で `done` を使うことも出来ます。
   
  -<<es6-promises,ES6 Promises>> では根本に用意されてる機能はあまり多くありません。
  -そのため、自ら拡張したり、拡張したライブラリ等を利用するケースが多いと思います。
  -
  -その時でも何でもやり過ぎると、せっかく非同期処理をPromiseでまとめても複雑化してしまう場合があるため、
  -統一感を持たせるというのは抽象的なオブジェクトであるPromiseにおいては大事な部分と言えるかもしれません。
  -
  +<<es6-promises,ES6 Promises>> 本身提供的功能并不是特别多。
  +因此，我想很多时候可能需要我们自己进行扩展或者使用第三方类库。
  +
  +我们好不容易将异步处理统一采用Promise进行统一处理，但是如果做过头了，也会将系统变得特别复杂，因此，保持风格的统一是Promise作为抽象对象非常重要的部分。
   
   [NOTE]
   ====
  
positive.code: });
  ----
  
  ちゃんと `catch` していれば何も問題がないのですが、その処理を忘れてしまうというミスを
  した時にどこでエラーが発生してるのかわからなくなるというヒューマンエラーを助長させる面があります。
  
  [source,javascript]
  .catchによるエラーハンドリングを忘れてしまった場合
  ----
  var string = "jsonではない文字列";
  JSONPromise(string).then(function (object) {
      console.log(object);
  }); // <1>
  ----
  <1> 例外が投げられても何も処理されない
  
  `JSON.parse` のような分かりやすい例の場合はまだ良いですが、
  メソッドをtypoしたことによるSyntax Errorなどはより深刻な問題となりやすいです。
  
  [source,javascript]
  .typoによるエラー
  ----
  var string = "{}";
  JSONPromise(string).then(function (object) {
      conosle.log(object);// <1>
  });
  ----
  <1> conosle というtypoがある
  
  この場合は、`console` を `conosle` とtypoしているため、以下のようなエラーが発生するはずです。
  
  > ReferenceError: conosle is not defined
  
  しかし、Promiseではtry-catchされるため、エラーが握りつぶされてしまうという現象が発生しやすくなります。
  毎回、正しく `catch` の処理を書くことが出来る場合は何も問題ありませんが、
  Promiseの実装によってはこのようなミスが検知しにくくなるケースがあることを知っておくべきでしょう。
  
  このようなエラーの握りつぶしは__unhandled rejection__と言われることがあります。
  Rejectedされた時の処理がないというそのままの意味ですね。
  
  [NOTE]
  ====
  このunhandled rejectionが検知しにくい問題はPromiseの実装に依存します。
  例えば、 https://github.com/yahoo/ypromise[ypromise] はunhandled rejectionがある場合は、その事をコンソールに表示します。
  
  > Promise rejected but no error handlers were registered to it
  
  また、 https://github.com/petkaantonov/bluebird[Bluebird] の場合も、
  明らかに人間のミスにみえるReferenceErrorの場合などはそのままコンソールにエラーを表示してくれます。
  
  > "Possibly unhandled ReferenceError. conosle is not defined
  
  ネイティブのPromiseの場合も同様にこの問題への対処としてGC-based unhandled rejection trackingというものが
  搭載されつつあります。
  
  これはpromiseオブジェクトがガーベッジコレクションによって回収されるときに、
  それがunhandled rejectionであるなら、エラー表示をするという仕組みがベースとなっているようです。
  
  https://twitter.com/domenic/status/461154989856264192[Firefox] や https://code.google.com/p/v8/issues/detail?id=3093[Chrome] のネイティブPromiseでは一部実装されています。
  ====
  
  === doneの実装
  
  Promiseにおける `done` は先程のエラーの握りつぶしを避けるにはどうするかという方法論として、
  そもそもエラーハンドリングをしなければいい という豪快な解決方法を提供するメソッドです。
  
  `done` はPromiseの上に実装することが出来るので、
  `Promise.prototype.done` というPromiseのprototype拡張として実装してみましょう。
  
  [source,javascript]
  [[promise-prototype-done.js]]
  
negative.code: });
  ----
  
  从上面我们可以看出，两者之间有以下不同点。
  
  * `done` 并不返回promise对象
  ** 也就是说，在done之后不能使用 `catch` 等方法组成方法链
  * `done` 中发生的异常会被直接抛给外面
  ** 也就是说，不会进行Promise的错误处理（Error Handling）
  
  由于`done` 不会返回promise对象，所以我们不难理解它只能出现在一个方法链的最后。
  
  此外，我们已经介绍过了Promise具有强大的错误处理机制，而`done`则会在函数中跳过错误处理，直接抛出异常。
  
  为什么很多类库都提供了这个和Promise功能相矛盾的函数呢？看一下下面Promise处理失败的例子，也许我们多少就能理解其中原因了吧。
  
  === 沈黙したエラー
  
  Promise虽然具备了强大的错误处理机制，但是（调试工具不能顺利运行的时候）这个功能会导致人为错误（human error）更加复杂，这也是它的一个缺点。
  
  也许你还记得，我们在 <<then-or-catch,then or catch?>> 中也看到了类似的内容。
  
  像下面那样，我们看一个能返回promise对象的函数。
  
  [source,javascript]
  [[json-promise.js]]
  