2010-06-16 36 views
8

Estoy usando una función proporcionada por una biblioteca de terceros. Esta función toma una función de devolución de llamada como parámetro, pero me gustaría esperar a que se llame a esta devolución de llamada antes de continuar. ¿Hay una forma estándar/aceptada para hacer esto?esperar la función async javascript para devolver

+12

acaba de abrazar la asincronía. no intentes luchar contra eso. – Anurag

Respuesta

6

No estoy seguro si esta es una posible solución para usted pero puede lograr el resultado deseado al dividir su código en 2 funciones. Supongamos que esto es lo que va a hacer:

Básicamente esta es su función original:

function origFunc() { 

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

se puede modificar el flujo de código con algo como:

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

Esto eliminará la espera lazo. Y hasta donde sé, la espera ocupada no funciona en IE (porque? Dios solo sabe) ...

0

No sé si la solución de Sharad funcionará en todos los casos (por ejemplo, si las llamadas a funciones son tan muy encadenado que tiene que pasar datos como variables en lugar de parámetros). Mismo problema con las variables globales. JavaScript simplemente no tiene una habilidad de "esperar".

Aunque tuve un problema similar y con jQuery, terminé con una solución de tipo MacGyver que le da muchísimo control cuando se ejecutan las funciones de JavaScript. Me acaba de publicar aquí como una respuesta a mi propia pregunta (pero se trata de una respuesta que no está comprobado - buscar mi nombre de usuario Emile): How to get a variable returned across multiple functions - Javascript/jQuery

Cuestiones relacionadas