Я мог вложить блоки try-catch в C++?

, если вы хотите перезагрузить все вкладки, которые полностью загружены и активны в своем окне

blockquote>
chrome.tabs.query({status:'complete'}, (tabs)=>{
tabs.forEach((tab)=>{
    if(tab.url){
        chrome.tabs.update(tab.id,{url: tab.url});
     }
    });
});

, вы можете изменить объект параметра, чтобы извлекать только активные вкладки, как {status:'complete', active: true} ссылаются на запрос api chrome extensions

Причина не использования chrome.tabs.reload:

Если свойства вкладки, особенно tab.url, не имеют изменено, вкладка не перезагружается. Если вы хотите принудительно перезагружать каждый раз, лучше обновить URL-адрес вкладки со своей вкладкой tab.url, которая отправляет событие изменения свойства и вкладка автоматически перезагружается.

18
задан Gal Goldman 17 February 2009 в 07:23
поделиться

5 ответов

Да совершенно законный.

, Хотя было бы лучше переместить внутренние в другой метод, таким образом, это выглядит более чистым, и Ваш метод (методы) меньше

22
ответ дан 30 November 2019 в 07:04
поделиться

Как уже указано, это возможно, но необходимо видеть, 'проваливаются '-схема в этом. Если в первом блоке выгоды попытки Ваше исключение будет поймано, то это не будет поймано внешним блоком выгоды. Однако, если это не станет пойманным внутренним блоком выгоды, то это попытается найти обработчик исключений соответствия во внешнем блоке выгоды.

Вы можете также explicitely повышать исключение далее до следующего обработчика исключений при помощи throw; в Вашем внутреннем обработчике исключений.

, Например, этот код:

try
{
    try
    {
        throw std::runtime_error("Test");
    }
    catch (std::runtime_error& e)
    {
        std::cerr << "Inner Exception-Handler: " << e.what() << std::endl;
        throw;
    }
}
catch (std::exception& e)
{
    std::cerr << "Outer Exception-Handler: " << e.what() << std::endl;
}

приведет к:

Inner Exception-Handler: Test
Outer Exception-Handler: Test

Это работает потому что станд.:: runtime_error получен из станд.:: исключение . Необходимо также отметить, что в таком тривиальном примере также возможно просто записать блоки выгоды друг после друга, но если Вы хотите выполнить другой код после первого блока выгоды, необходимо будет вложить их.

11
ответ дан 30 November 2019 в 07:04
поделиться

Да, это законно. Как сказало изгнание , один способ иметь дело с ним состоит в том, чтобы поместить внутренний блок try-catch в свою собственную функцию и вызвать ту функцию от Вашего внешнего блока try-catch.

Другой способ обработать его с несколькими блоками выгоды.

void f()
{
    try
    {
        //Some code that throws ExceptionA
        //Some code that throws ExceptionB
    }
    catch(ExceptionA ea)
    {
        //Some exception handling
    }
    catch(ExceptionB eb)
    {
        //Some exception handling
    }
}//f

вещь остерегаться вот специфика типов исключительной ситуации в Ваших блоках выгоды. Если бы ExceptionB расширяет ExceptionA в примере выше, то блок ExceptionB никогда не называть, потому что любой ExceptionB, который брошен, был бы обработан блоком ExceptionA. Необходимо заказать блоки выгоды в самом характерном для наименее определенного порядка при контакте с иерархиями Класса исключений.

6
ответ дан 30 November 2019 в 07:04
поделиться

Да, Вы можете.

1
ответ дан 30 November 2019 в 07:04
поделиться

Ее легальное, но его не все, что полезный, если Вы не выдаете исключение от своей внутренней выгоды (). Например, Вы могли бы хотеть поймать системное исключение уровня, но бросить Ваш собственный объект исключения для ясности кода.

1
ответ дан 30 November 2019 в 07:04
поделиться
Другие вопросы по тегам:

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