13

特にkoaのコンテキストで、javascript の新しい ecma6 ジェネレーターと yield-operator に頭を悩ませています。

不自然な例を考えてみましょう:

  newUser.save(function(err, user) {
    if(err){
      //do something with the error
    }
    console.log("user saved!: " user.id);
  }

これは次のようになります。

  var user = yield newUser.save();
  console.log("user saved!: " user.id);

errしかし、実行する目的で、存在することをどのように確認し//do something with the errorますか?

4

2 に答える 2

13

残念ながら、ジェネレーターはエラー処理が苦手です。try-catchつまり、すべてのステップでエラーを手動でチェックし、それらを手動で伝播するのも面倒ですが、Javascript のステートメントほどではありません。

   try {
       var user = yield newUser.save();
       console.log("user saved!: " user.id);
   }
   catch (e) {
       //Abstract code that checks if the error is what you think it is
       if (isFromNewUserSave(e)) {

       }
       else {
           throw e;     
       }
   }

ご覧のとおり、try catch ステートメントの問題は、すべてをキャッチすることです。他の言語ではコンパイラ エラーになるエラーが、実行時に Javascript でスローされるという追加の問題があります。ただし、チェックなしで try catch を使用しただけでは、それらはまったく表示されません。

于 2014-01-02T16:54:35.477 に答える