Почему у промиса state: «fulfilled» если выполняется метод reject?

В JavaScript промисы используются для работы с асинхронными операциями. Они представляют собой объекты, которые представляют результат или ошибку асинхронной операции в будущем. Промисы имеют три возможных состояния: pending, fulfilled и rejected.

Теперь рассмотрим ваш вопрос. Если при выполнении метода reject() состояние промиса выставляется в fulfilled, это, обычно, означает, что что-то пошло не так.

Промисы в JavaScript жестко определены стандартом ECMAScript (стандарт, на котором основан JavaScript), и его поведение в случае вызова метода reject() должно быть строго соблюдено. Если при вызове reject() состояние промиса все же переходит в fulfilled, возможно, это связано с наличием обработки ошибок (error handling) в вашем коде.

Обычно, при вызове метода reject(), промис переходит в состояние rejected, и происходит обработка ошибки в контексте, который определен при вызове метода catch() или через метод then(), который принимает две функции обратного вызова - первая для обработки успешного выполнения промиса, а вторая - для обработки ошибки.

Вот пример кода, который демонстрирует эту логику:

const promise = new Promise((resolve, reject) => {
  reject('Ошибка');
});

promise.then(
  result => {
    console.log(result); // не сработает
  },
  error => {
    console.error(error); // если вызовет ошибку, выведет 'Ошибка'
  }
);

В этом примере мы создали новый промис и немедленно вызвали метод reject() для генерации ошибки. Затем мы использовали метод then() для обработки успешного и неуспешного выполнения промиса. Если вызывается метод reject(), вторая функция обратного вызова (второй аргумент метода then()) будет вызвана и с ее помощью можно дополнительно обработать ошибку.

В заключение, если у вашего промиса состояние становится fulfilled при вызове метода reject(), это может быть связано с обработкой ошибок в вашем коде или с неправильной реализацией промиса.