Search
Write a publication
Pull to refresh

Comments 13

Конкретно в приведенном случае- да, то же самое. Потому что значение промиса нигде не используется. А вот если оно используется, то так красиво сделать не получится. Попробуйте заменить вот это:


fetch("https://jsonplaceholder.typicode.com/todos/1")
    .then(x => x.json())
    .finally(() => console.log("request complete"))
    .then(x => console.log("title: " + x.title))
    .catch(x => console.error(x));
Не то же самое. catch тоже может кинуть экцепшн и тогда then не сработает.
Промисы прекрасны. Но вот раздражает, что нельзя завершить работу где-то в середине цепочки как-то кроме выбрасывания исключения.
Так можно же просто вернуть промис, который никогда не разрешится. Или я чего-то не понимаю?
Если эту цепочку никуда не сохранять — то нет, не потечет.

А откуда такое требование — "как-то кроме выбрасывания исключения"? Чем исключение не устроило?


Или смущает не исключение, а сама операция throw? В таком случае return Promise.reject(...) в помощь.

Все таки исключения предназначены для ошибок и нештатных ситуаций. Иногда вполне штатно необходимо прекратить исполнения кода, например если обнаружится что некая сущность в базе данных помечена как удаленная. Я сейчас для этого создаю цепочку обернутую в анонимную функцию и в скопе этой функции делаю флаг и по состоянию этого флага в каждом зене определяю нужно ли делать код. Примерно так:
(()=>{
let STOP = false;
Promise...
    .then(() => {
        ...
        if (!user) return STOP = true;
    }
    .then(() => {
        if (STOP) return;
        ...
    }
})();
Лучше бы реализовали Promise.prototype.cancel() который реализован в том же Bluebird. Очень полезен в случаях когда установка стейта react-компонента уже неактуальна потому как компонент успел размонтироваться пока промис исполнялся.

Это еще надо как то увязывать с сигналами отменяемых fetch.

Вот только в том же Bluebird один раз уже пришлось менять семантику отмены. И все равно остались странности, из-за которых отмена обещаний и выключена по умолчанию.

одно из важнейших новшеств стандарта
Которое было еще во времена jQuery Deferred и Q ($q из первого angular). Для меня до сих пор остается загадкой, почему finally не вошел в стандарт с самого начала, ведь это удобная и сама-собой напрашивающаяся функция.
Sign up to leave a comment.