Предотвратить продолжение Javascript, когда функция не вернулась? - PullRequest
0 голосов
/ 16 марта 2011

У меня есть что-то вроде ...

//start function
var info = getinfofromserver();
//Continue with function

, где getinfofromserver() выполняет AJAX-вызов. Я заметил, что мой код продолжит работать, даже если var info не было присвоено значение от getinfofromserver(). Мне интересно, есть ли какой-нибудь способ заставить мой код «держаться» до тех пор, пока эта функция не вернется? Я знаю, что есть способы выполнения обратных вызовов и т. Д. Из getinfofromserver(), но я бы предпочел сделать это на этом этапе, чтобы сохранить свой код СУХИМ.

Ответы [ 4 ]

0 голосов
/ 16 марта 2011

Другие обращались к асинхронной природе вызовов AJAX. Но относительно вашего более общего вопроса:

Мне интересно, можно ли как-нибудь удержать мой код до тех пор, пока эта функция не вернется?

Это на самом деле то, что происходит; он не продолжит работу с остальным кодом, пока эта функция не вернется. Просто функция, вероятно, возвращается до того, как вызов AJAX получит ответ. Но это другое дело; вызов AJAX не является функцией.

0 голосов
/ 16 марта 2011
  1. «A» в AJAX означает «асинхронный».Вы почти всегда должны использовать обратные вызовы вместо синхронного вызова.
  2. Ничто в использовании такого обратного вызова не нарушает принцип DRY
0 голосов
/ 16 марта 2011

Можно выполнять синхронные обратные вызовы AJAX (это довольно хороший оксюморон, но кого это волнует).

Например, jQuery.ajax предлагает параметр async ( docs ), а другие фреймворки JavaScript ведут себя аналогично. Тем не менее, я настоятельно призываю вас рассмотреть возможность использования real AJAX - вот как это разработано.

Использование синхронных обратных вызовов может быть гораздо более трудоемким для вас, чем простой запрос AJAX с обратным вызовом. Вам не нужно повторять какой-либо код в любом случае, поэтому я не понимаю, почему использование AJAX нарушает DRY

0 голосов
/ 16 марта 2011

По умолчанию во многих средах AJAX-запрос по определению выполняется асинхронно. Это означает, что ваша функция будет продолжена после отправки запроса, а результаты будут обрабатываться зарегистрированной вами функцией обратного вызова.

В некоторых инфраструктурах, или если вы кодируете до уровня браузера, вместо этого вы можете выполнить запрос синхронно, но для поиска подходящего параметра для вашей платформы или браузера требуется небольшой поиск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...