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