В Angular a Promise с finally () - блок не отклоняется должным образом - PullRequest
2 голосов
/ 03 апреля 2019

У меня проблема с угловым 7 приложением.Когда у меня есть обещание с блоком finally , ошибки не выдаются!Они проглатываются, не замечая, Когда я удаляю блок finally, он ведет себя как ожидалось .

Вот несколько примеров: С vanillaJS (без Angular Framework) он работает так, как я и ожидалработа: как только вы запускаете код, он выводит мои console.logs на консоль и выдает ошибку «Uncaught (in обещание)».Также см. Скриншот.

Promise.resolve()
    .then(() => {
        console.log('then');
        return Promise.reject('This is an error. Please show up in the console, thank you.');
    })
    .finally(() => {
        console.log('finally');
    });

Скриншот vanillaJS enter image description here

Здесь у нас одинаковый код в Angular.См. Stackblitz для справки: https://stackblitz.com/edit/angular-iv7cq2

Когда я удаляю «finally», он выдает ошибку, как я и ожидал.С «finally» он просто глотает ошибку.

Скриншот Angular

enter image description here

Почему это так?Где я должен изменить свой код, чтобы Promises с finally-блоками также выдавал ошибки?

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

Вы можете перехватить и сбросить ошибку после наконец.

Результат: необработанный отказ от обещания

Promise.resolve()
    .then(() => {
        console.log('then');
        return Promise.reject('This is an error. Please show up in the console, thank you.');
    })
    .finally(() => {
        console.log('finally');
    }).catch(err => {
        throw err;
    });
1 голос
/ 03 апреля 2019

из this_link вы можете получить идею, которая в конце концов поглотит ошибку: потому что

Если, наконец, присутствует, он определяет обработчик 'cleanup'.Предложение try выполняется, в том числе любые исключения и другие.Если исключение возникает в каком-либо из пунктов и не обрабатывается, исключение временно сохраняется.Предложение finally выполняется.Если есть сохраненное исключение, оно повторно вызывается в конце предложения finally.Если предложение finally вызывает другое исключение или выполняет оператор return или break, сохраненное исключение отбрасывается:

Я работаю в основном на Python и выше, взято из этого документа Python какэто происходит одинаково на всех языках: но если вы хотите, чтобы ошибка возникала и обрабатывалась, вы можете использовать этот синтаксис:

return Promise.resolve()
    .then(() => {
        console.log('then');
        return Promise.reject('This is an error. Please show up in the console, thank you.');
    }).catch ((error) =>{
        console.log('error');

    }).finally(() => {
        console.log('finally');
    });
...