ожидайте асинхронной функции JavaScript для возврата

Я использую функцию, предоставленную сторонней библиотекой. Эта функция берет функцию обратного вызова в качестве параметра, но я хотел бы ожидать этого обратного вызова, который назовут перед продолжением. Существует ли стандарт / принятый способ сделать это?

8
задан Yi Jiang 22 August 2010 в 05:53
поделиться

2 ответа

Я не уверен, что это возможное решение для вас, но вы можете добиться желаемого результата, разбив код на 2 функции. Предположим, это то, что вы собираетесь делать:

По сути, это ваша исходная функция:

function origFunc() {

    codeBeforeThirdPartyFunc();
    ThirdPartyFunc(oldCallBackFunc);
    Wait();
    codeAfterCallBackFunc();
}

Вы можете изменить поток кода примерно так:

function newFunc() {
    codeBeforeThirdPartyFunc();
    ThirdPartyFunc(newCallBackFunc);
}
function newCallBackFunc() {
  oldCallBackFunc();
  codeAfterCallBackFunc();
}

Это устранит цикл ожидания. И, насколько мне известно, в IE не работает занятое ожидание (потому что? Одному Богу известно) ..

6
ответ дан 5 December 2019 в 21:16
поделиться

Я не знаю, сработает ли решение Шарада во всех случаях (например, если ваши вызовы функций связаны настолько далеко, что вам приходится передавать данные как переменные, а не параметры).Та же проблема с глобальными переменными. В JavaScript просто нет возможности «ждать».

Хотя у меня была похожая проблема и с jQuery, я остановился на решении типа MacGyver, которое дает вам массу контроля над выполнением функций javascript. Я просто разместил его здесь как ответ на свой вопрос (но это ответ, который не проверен - ищите мое имя пользователя Эмиль): Как получить переменную, возвращаемую несколькими функциями - Javascript/jQuery

0
ответ дан 5 December 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: