Используя ES2017, вы должны иметь это как объявление функции
async function foo() {
var response = await $.ajax({url: '...'})
return response;
}
и выполнить его следующим образом.
(async function() {
try {
var result = await foo()
console.log(result)
} catch (e) {}
})()
Или синтаксис Promise
foo().then(response => {
console.log(response)
}).catch(error => {
console.log(error)
})
Не получая слишком технических:
Если вы выполняете итерацию через изменяемую последовательность в Python, и последовательность изменяется во время ее повторения, не всегда ясно, что произойдет. Если вы вставляете элемент в последовательность во время итерации через него, что теперь разумно будет считаться «следующим» элементом в последовательности? Что делать, если вы удаляете следующий объект?
По этой причине повторение с помощью изменяемой последовательности при ее изменении приводит к неуказанному поведению. Все может произойти, в зависимости от того, как именно реализован список. : -)
Когда вы изменяете коллекцию, которую вы итерируете, итератор может вести себя неожиданно, например, пропускать элементы или возвращать один и тот же элемент дважды.
Этот код бесконечно циклически выполняется при запуске:
>>> a = [ 'foo', 'bar', 'baz' ]
>>> for x in a:
... if x == 'bar': a.insert(0, 'oops')
Это потому, что итератор использует индекс, чтобы отслеживать, где он находится в списке. Добавление элемента в начале списка приводит к тому, что элемент «bar» возвращается снова, вместо того, чтобы итератор переходил к следующему элементу.
Это обычная проблема на многих языках. Если у вас есть линейная структура данных, и вы повторяете ее, что-то должно отслеживать, где вы находитесь в структуре. Это может быть текущий индекс или указатель, но это какой-то палец, указывающий на «текущее место».
Если вы изменяете список во время итерации, этот курсор, вероятно, будет неправильным.
Общей проблемой является то, что вы удаляете элемент под курсором, все слайд вниз, следующая итерация цикла увеличивает курсор и вы случайно пропустили элемент.
Некоторые реализации структуры данных предлагают возможность удалять элементы во время итерации, но большинство из них не работает.