code: function settleXthen (p, x, xthen) {
          // 2.3.3.3
          var err = genTryCatcher(xthen, x)(function (y) {
              // 2.3.3.3.3
              // 2.3.3.3.1
              x && (x = $null, settleWithX(p, y));
          }, function (r) {
              // 2.3.3.3.3
              // 2.3.3.3.2
              x && (x = $null, settlePromise(p, $rejected, r));
          });
  
          // 2.3.3.3.4.1
          if (err === $tryErr && x) {
              // 2.3.3.3.4.2
              settlePromise(p, $rejected, err.e);
              x = $null;
          }
      }
docs: Resolve then with its promise.
  @private
  @param  {Yaku} p
  @param  {Thenable} x
  @param  {Function} xthen