Есть ли способ вызвать Return для родительской функции из дочерней функции в JavaScript? - PullRequest
5 голосов
/ 26 февраля 2010

У меня действительно необычный случай. Я хочу return некоторые данные - данные, которые загружаются через AJAX. Пока режимы асинхронизации и синхронизации не доставляют данные вовремя до return. Возможно ли, чтобы я мог либо вызвать return из дочерней функции для родительской функции, либо timeOut мог бы решить проблему? Я не могу придумать другой способ сделать это, но данные должны быть возвращены.

Ответы [ 3 ]

3 голосов
/ 26 февраля 2010

Вы можете предоставить функцию обратного вызова:

function parentfunction(callback) {
    callback(getAjax());
}

function childfunction() {
    parentfunction(function(ajaxData) {
        //Do stuff with data
    });
}
2 голосов
/ 26 февраля 2010

Ответ на ваш вопрос - нет.

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

Вот простой пример:

var someValue;
fetchValueFrom('http://example.com/some/url/with/value', function(val) { 
  someValue = val; 
  doSomethingElseWith(someValue);
});

Здесь мы создаем функцию и передаем ее в качестве второго параметра в вызов fetchValueFrom. Как только значение станет доступным, будет вызвана эта функция, которая установит переменную и вызовет другую функцию для продолжения выполнения.

0 голосов
/ 26 февраля 2010

Просто передайте false в качестве третьего параметра на XMLHttpRequest.open. Это означает «выполнить этот запрос синхронно».

См. Справку для себя.

...