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
let act;
describe('ReactDOMSafariMicrotaskBug-test', () => {
  let container;
  let simulateSafariBug;
  beforeEach(() => {
    
    
    
    
    let queue = [];
    window.queueMicrotask = function(cb) {
      queue.push(cb);
    };
    simulateSafariBug = function() {
      queue.forEach(cb => cb());
      queue = [];
    };
    jest.resetModules();
    container = document.createElement('div');
    React = require('react');
    ReactDOMClient = require('react-dom/client');
    act = require('jest-react').act;
    document.body.appendChild(container);
  });
  afterEach(() => {
    document.body.removeChild(container);
  });
  it('should be resilient to buggy queueMicrotask', async () => {
    let ran = false;
    function Foo() {