Отгадка.
Разница в том, какой именно результат обслуживает catch.
В предложенном коде:
promise.resolve().then(
( theVal ) => { /* якись код */ }
).catch(
( theVal ) => { /* якись код */ }
);
callback из catch обслуживает то, что вернет callback из предшествующего then. А это может быть что угодно - как resolved так и rejected promise так и pending promise.
В отличии от кода без catch:
promise.resolve().then(
( theVal ) => { /* якись код */ }
, (theVal) => { /* якись код */ }
);
где реакция описанного в нем callback на rejected происходит по результату предшествующего ему кода (в нашем примере это результат работы resolve)
Иными словами, чтобы привести оба кода к состоянию когда они были бы эквивалентными по своей логике, следовало бы, для случая catch написать вот так:
var thePromise = promise.resolve();
thePromise.then(
( theVal ) => { /* якись код */ }
);
thePromise.catch(
( theVal ) => { /* якись код */ }
);
Почему это может быть для Вас важно.1) Всегда следует помнить, что методы связанные с Promise совершают большую работу по формированию нового Object Promise. Эта работа много больше чем формирование обычного обьекта.
2) Методы принимают в качестве аргументов и возвращают в качестве результата ЛЮБЫЕ значения, от типа которых прямо зависит то, что происходит дальше.
Например
В следующем примере:
Promise.resolve().then(
()=>{}
, ()=>{}
).catch(
()=>console.log('Rejected')
);
catch будет вызван только в случае если один из callback-ов описанных в then уровнем выше, вернет Promise.reject. Причем совершенно неважно будет это collback для resolved или rejected.