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;
      }
  }
Resolve then with its promise.
@private
@param  {Yaku} p
@param  {Thenable} x
@param  {Function} xthen