Есть два документа, которые должны грузиться асинхронно. Из документ А, вызывается функция, которая в документе B. Проблема в том, что происходит состояние гонки. Вызывается функция, который еще не существует. Есть ли способ, проверить на сущестование функци и только после ее вызвать!? А еще лучше, если бы функция могла бы уведомить какой либо обработчик о том, что она создана. Но, надо, чтобы "обрабочик" тоже был уже создан. Так как все грузиться асинхронно, то не всегда можно приугадать что появиться быстрее
Promises есть в некоторых языках программирования. "Обещание" того, что страница загрузится. Нужна конструкция как в JavaScript Promise.all([ P1, P2 ]); – после выполнения обоих обещаний можно вызывать функцию.
// псевдокод
var docA, docB;
Pa = asyncload("url-A"); // ф-я возвращает промис
Pb = asyncload("url-B");
Promise.all([ Pa, Pb ]).then( docA.b_is_ready() );
// метод объекта docA "b_is_ready" вызывает функцию в документе B
Не могли бы вы написать псевдо код, который бы решал мою проблему. Для большей ясности, а то я пока не очень понимаю, как с промисами можно решить данную проблему
Leo Mavrin, обновил ответ. Два асинхронных задания, должны завершиться оба, прежде, чем один из них сможет вызвать метод во втором. То же можно и без промисов – нужно обрабатывать события завершения загрузки каждого из документов обработчиком, который проверяет, загружены ли оба. Если да - зеленый свет на дальнейшие вызовы.