Ответ на ваш вопрос связан с тем, как работают методы `catch` и `then` в промисах.
Когда вы используете метод `catch(null)`, это означает, что вы не обрабатываете ошибку. Фактически, это эквивалентно следующему коду:
```javascript
.catch(null)
```
```javascript
.then(undefined, null)
```
Таким образом, ошибка пропускается и переходит к следующему методу `then`.
Когда обработка ошибки достигает второго метода `catch`, он ловит ошибку и выполняет соответствующий колбэк. Однако, после этого промис переходит в состояние "выполнено" с значением `undefined`.
Это происходит потому, что в этом случае обработка ошибки осуществляется и промис считается успешно выполненным. Значение `undefined` возвращается из первого блока `then`, так как никакого значения не было возвращено явно.
В результате вы видите в выводе "api error", затем "2" и, наконец, состояние промиса "выполнено" с значением `undefined`. Состояние "выполнено" указывает, что промис успешно завершился.