Batched state changes are not flushed if the promise code changes the DOM (= attaching an iframe). Reproduceable with Safari.

React version: 18.1.0

## Steps To Reproduce

1. Open [codepen](https://codepen.io/kh-viewar/pen/wvpVLxM) with Safari.
2. Click "Upload"
3. => "Spinner" text does not render while Promise is in pending

Link to code example:

https://codepen.io/kh-viewar/pen/wvpVLxM

## The current behavior

State changes are not executed.

## The expected behavior

State should change to true and render spinner component. After promise is resolved (2 seconds timeout), state should switch back to false and spinner component should unmount.

## Original discussion

https://github.com/facebook/react/issues/24365
} else {
       E
       o
      workInProgressRootPingedLanes = mergeLanes(
        workInProgressRootPingedLanes,
        pingedLanes,
      );
    }
  }
  ensureRootIsScheduled(root, eventTime);
}
function retryTimedOutBoundary(boundaryFiber: Fiber, retryLane: Lane) {
   The boundary fiber (a Suspense component or SuspenseList component)
   previously was rendered in its fallback state. One of the promises that
   suspended it has resolved, which means at least part of the tree was
   likely unblocked. Try rendering again, at a new lanes.
  if (retryLane === NoLane) {
     T
     u
    retryLane = requestRetryLane(boundaryFiber);
  }
   TODO: Special case idle priority?
  const eventTime = requestEventTime();
  const root = markUpdateLaneFromFiberToRoot(boundaryFiber, retryLane);
  if (root !== null) {
    markRootUpdated(root, retryLane, eventTime);
    ensureRootIsScheduled(root, eventTime);
  }
}
export function retryDehydratedSuspenseBoundary(boundaryFiber: Fiber) {