Это из-за внутренней работы Promise.reject
. В основном это так:
Promise.reject = function(err) {
return new this((_, rej) => rej(err));
};
Теперь, если вы вызываете его с помощью new
, this
относится к вновь созданному объекту, и это не конструктор.
Promise.reject(); // this == Promise -> constructor
new Promise.reject(); // this == {} -> not a constructor
Следовательно, обратный вызов .then
выдает ошибку, и это приводит к отклонению возвращенного обещания с этой ошибкой.