// максимальное значение const MAX_VALUE = 256 // наше начальное значение, с которым мы что-то делаем const initialValue = new Option(MAX_VALUE) // значение по умолчанию, которое мы будем использовать, если при вычислениях что-то пошло не так const defaultValue = new Option(0) defaultValue.isDefault = true const result1 = initialValue .then((v1) => { try { // что-то делаем... const newValue = v1 + 1 if (newValue > MAX_VALUE) { throw new RangeError(`The value must be less than or equal to ${MAX_VALUE}`) } return newValue } catch {} }) // вызовется, т.к. then вернул undefined .or(defaultValue) if (defaultValue.isDefault) { // что-то делаем в таком случае и снимаем флаг isDefault console.log('result1 is default!') result1.isDefault = false } console.log('result1', '>', result1.unwrap()) const result2 = initialValue .then((v2) => { try { // что-то делаем... const newValue = v2 + 2 if (newValue > MAX_VALUE) { throw new RangeError(`The value must be less than or equal to ${MAX_VALUE}`) } return newValue } catch {} }) // вызовется, т.к. then вернул undefined .or(defaultValue) // этот блок не будет выполнен 😭 if (result2.isDefault) { // что-то делаем в таком случае и снимаем флаг isDefault console.log('result2 is default!') result1.isDefault = false } console.log('result2', '>', result2.unwrap()) // output: // result1 is default! // result1 > 0 // result2 > 0