Если идея заключается в том, что вы не управляете другими готовыми обработчиками, то, учитывая ваш пример, где другой обработчик использовал setTimeout
, вы никогда не узнаете (без проверки другого кода), будет ли ваш код работать после всех другой код.
readyList
не помогло бы, даже если бы оно было общедоступным, потому что в вашем примере обработчик с setTimeout
будет удален из readyList
задолго до запуска обработчика setTimeout
. Массив readyList
также не имеет никакого контроля над асинхронным кодом такого рода * 1009.
Так что, если вы не контролируете (не можете изменить) другой код, тогда у меня действительно нет решения. Но если другой код просто долго выполняется, но не асинхронный , тогда проблем не будет, потому что, если ваш код является последним назначенным обработчиком .ready()
, не должно иметь значения, как долго другие обработчики берутся выполнить. Если их код синхронный , он заставит вас ждать, пока они не будут завершены. Просто если они используют асинхронный код, как, например, ваш setTimeout
пример, то вы ничего не можете сделать, кроме изучения другого кода и изменения своего кода, чтобы он работал последним.