C ++: Как узнать, какое исключение в catch с эллипсисом [дубликат]

Другие ответы превосходны, и я просто хочу дать прямой ответ на этот вопрос. Просто ограничение асинхронных вызовов 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);
});

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

2
задан ZivS 3 September 2014 в 12:00
поделиться

2 ответа

Извините, вы не можете этого сделать. Вы можете получить доступ только к объекту исключения в блоке catch для конкретного типа исключения.

2
ответ дан Mike Seymour 31 August 2018 в 17:55
поделиться

С C ++ 11 и далее вы можете использовать std::current_exception & amp; c:

std::exception_ptr p;
try {

} catch(...) {
    p = std::current_exception();
}

Затем вы можете «осмотреть» p, выполнив приведения & amp; c.

В более ранних стандартах нет портативного способа проверки исключения на сайте catch(...).

3
ответ дан Bathsheba 31 August 2018 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: