Другие ответы превосходны, и я просто хочу дать прямой ответ на этот вопрос. Просто ограничение асинхронных вызовов jQuery
Все вызовы ajax (включая $.get
или $.post
или $.ajax
) асинхронны.
Учитывая ваш пример
var outerScopeVar; //line 1
$.post('loldog', function(response) { //line 2
outerScopeVar = response;
});
alert(outerScopeVar); //line 3
Выполнение кода начинается с строки 1, объявляет переменную и триггеры и асинхронный вызов в строке 2 (т. е. пост-запрос), и продолжает выполнение из строки 3, не дожидаясь, когда почтовый запрос завершит выполнение .
Допустим, что запрос на отправку занимает 10 секунд, значение outerScopeVar
будет установлено только после этих 10 секунд.
Чтобы попробовать,
var outerScopeVar; //line 1
$.post('loldog', function(response) { //line 2, takes 10 seconds to complete
outerScopeVar = response;
});
alert("Lets wait for some time here! Waiting is fun"); //line 3
alert(outerScopeVar); //line 4
Теперь, когда вы выполните это, вы получите предупреждение в строке 3. Теперь подождите некоторое время, пока не убедитесь, что почтовый запрос вернул некоторое значение. Затем, когда вы нажмете «ОК», в окне предупреждения следующее предупреждение выведет ожидаемое значение, потому что вы его ждали.
В сценарии реальной жизни код становится,
var outerScopeVar;
$.post('loldog', function(response) {
outerScopeVar = response;
alert(outerScopeVar);
});
Весь код, который зависит от асинхронных вызовов, перемещается внутри асинхронного блока или ожидает асинхронных вызовов.
Извините, вы не можете этого сделать. Вы можете получить доступ только к объекту исключения в блоке catch
для конкретного типа исключения.
С C ++ 11 и далее вы можете использовать std::current_exception
& amp; c:
std::exception_ptr p;
try {
} catch(...) {
p = std::current_exception();
}
Затем вы можете «осмотреть» p
, выполнив приведения & amp; c.
В более ранних стандартах нет портативного способа проверки исключения на сайте catch(...)
.