Краткий ответ: ваш метод foo()
возвращается немедленно, а вызов $ajax()
выполняется асинхронно после возврата функции . Проблема заключается в том, как и где сохранить результаты, полученные при вызове async, после его возврата.
В этом потоке было задано несколько решений. Возможно, самый простой способ - передать объект методу foo()
и сохранить результаты в члене этого объекта после завершения асинхронного вызова.
function foo(result) {
$.ajax({
url: '...',
success: function(response) {
result.response = response; // Store the async result
}
});
}
var result = { response: null }; // Object to hold the async result
foo(result); // Returns before the async completes
Обратите внимание, что вызов foo()
] все равно не вернут ничего полезного. Однако результат асинхронного вызова теперь будет сохранен в result.response
.
Это не действительный код Swift, он генерируется «на лету».
Здесь default
означает, что есть какое-то значение по умолчанию, но генератор не может визуализировать его правильно, чтобы вы его увидели. Значение по умолчанию технически является встроенной функцией, поэтому его нельзя легко преобразовать в простое объявление.
Вы можете видеть похожие объявления для assert
func assert(condition: @auto_closure () -> Bool,
_ message: StaticString = default,
file: StaticString = default,
line: UWord = default)
Где file
по умолчанию #file
(__FILE__
в Swift 1.x) и line
по умолчанию установлено значение #line
(__LINE__
в Swift 1.x).
В случае NSLocalizedString
значением по умолчанию является "Localizable"
, ссылаясь на файл локализации по умолчанию Localizable.strings
.