2014-11-19 4 views
0

Добро пожаловать,

Я хочу вызвать синхронный метод javascript без обратных вызовов. Метод является POST асинхронным.

function someMethod() { 
    var bean; //bean is a proxy object provide by external library 
    if(clicked_onSpecial_field) { 
     if(!bean.isAuthorized()) { //here is a async call 
      return false; 
     } 
    } 

    //a lot of other instructions... 

} 

С одной стороны, как правило, clicked_onSpecial_field = false, так что я не могу поставить все другие инструкции в обратном вызове. С другой стороны bean - это предоставление мне прокси-объекта. В этом случае я не знаю, каким образом я могу использовать $.ajax.

Не могли бы вы помочь?

+0

Как обычно вы возвращаете результат из bean.isAuthorized()? И может ли этот результат измениться в зависимости от того, что произошло раньше во время использования страницы? – Nzall

+0

Это первый раз, когда я называю этот метод. Я предпочитаю проверять каждый раз, потому что теоретически статус авторизации может быть изменен во времени. Но спасибо за скрытое предложение загрузить эту переменную при загрузке страницы :) –

ответ

1

Я хочу вызвать синхронный метод javascript без обратных вызовов. Метод является POST асинхронным

Если метод по своей сути асинхронен, вы не можете вызвать его так, чтобы он возвращался синхронно. Это просто невозможно. См. How do I return the response from an asynchronous call?.

обычно clicked_onSpecial_field = false поэтому я не могу поместить все остальные инструкции в обратный вызов.

Конечно, вы можете!

function someMethod() { 
    var bean; //bean is a proxy object provide by external library 
    if (clicked_onSpecial_field) { 
     bean.isAuthorized(goOn); // pass goOn as callback 
    } else { 
     goOn(true); // just call it directly if there's no async action 
    } 

    function goOn(cond) { 
     //a lot of other instructions... 
    } 
} 

Обратите внимание, что someMethod теперь асинхронно, так что если вам нужно передать какие результаты от него, то вам нужно использовать функцию обратного вызова там.

Смежные вопросы