Я использую функцию, предоставленную сторонней библиотекой. Эта функция берет функцию обратного вызова в качестве параметра, но я хотел бы ожидать этого обратного вызова, который назовут перед продолжением. Существует ли стандарт / принятый способ сделать это?
Я не уверен, что это возможное решение для вас, но вы можете добиться желаемого результата, разбив код на 2 функции. Предположим, это то, что вы собираетесь делать:
По сути, это ваша исходная функция:
function origFunc() {
codeBeforeThirdPartyFunc();
ThirdPartyFunc(oldCallBackFunc);
Wait();
codeAfterCallBackFunc();
}
Вы можете изменить поток кода примерно так:
function newFunc() {
codeBeforeThirdPartyFunc();
ThirdPartyFunc(newCallBackFunc);
}
function newCallBackFunc() {
oldCallBackFunc();
codeAfterCallBackFunc();
}
Это устранит цикл ожидания. И, насколько мне известно, в IE не работает занятое ожидание (потому что? Одному Богу известно) ..
Я не знаю, сработает ли решение Шарада во всех случаях (например, если ваши вызовы функций связаны настолько далеко, что вам приходится передавать данные как переменные, а не параметры).Та же проблема с глобальными переменными. В JavaScript просто нет возможности «ждать».
Хотя у меня была похожая проблема и с jQuery, я остановился на решении типа MacGyver, которое дает вам массу контроля над выполнением функций javascript. Я просто разместил его здесь как ответ на свой вопрос (но это ответ, который не проверен - ищите мое имя пользователя Эмиль): Как получить переменную, возвращаемую несколькими функциями - Javascript/jQuery