2010-06-16 6 views
8

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

+12

просто обнимать асинхронность. не пытайтесь бороться с ним. – Anurag

ответ

6

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

В основном это ваша оригинальная функция:

function origFunc() { 

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

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

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

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

0

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

Хотя у меня была аналогичная проблема и с jQuery, у меня получилось решение типа MacGyver, которое дает вам тонны контроля при выполнении javascript-функций. Я просто разместил его здесь в качестве ответа на свой вопрос (но я это ответ, который не проверил - обратите внимание на мое имя пользователя Эмиля): How to get a variable returned across multiple functions - Javascript/jQuery