再帰するにしてもループで レベルアップカウントを取得して最終的に結果を addLevel() するにしてもその処理をするならメソッドは一つにまとめたほうがよくて，emit() は成功と失敗が同じレイヤ（っていうのか? ）にあるほうが見やすい？


なんかテキトーな擬似コード

```
var f = function() {
  try {
    cnt = 0
    while()  か g() の再帰
    // ここでまとめてレベルアップの値を変更するほうがいいのかな
    // 経験値の計算の都度レベルアップの通知をするのは www を通す関係上通知タイミングがずれる可能性もある
    if cnt > 0 {
      model.addLevel(cnt)
    }
    io.emit(level up)
  } catch (Exception e) {
    // なんらかのエラー時に送信する内容をレベルアップの通知と同じレイヤーに置くと成功・失敗のハンドリングがみやすい気がする
    io.emit(levelup err);
  }
}

/**
 * 与えられた経験値からどのくらいレベルが上がるのかを返すメソッドのつもり
 */
var g = function(exp) {
  // 条件が終わったら 0 を返して return 中に +1 してくか再帰の深さをレベルとして渡すみたいな実装が思いつく
  // いずれにせよ g() の中で g() を呼び出すみたいな実装のほうがバグりにくいという経験
  if (exp < nextLevelExp[level]) {
    return 0;
  }
  return 1 + g(exp)
}
```