Спецификация, на которую я имею в виду, находится в http://promises-aplus.github.io/promises-spec/.
При использовании then()
вы можете либо вернуть обещание, либо отклонить обещание, когда захотите, либо вы можете отбросить исключение, чтобы отклонить обещание.
Почему api не был разработан таким образом, что для функции then
он передал функцию разрешения и отклонения, такую как исходный конструктор обещаний?
Исключения тяжелы на многих языках (и я предполагаю, что в javascript тоже), поэтому кажется странным, что они используют их как выбор для управления потоком. Создавая целый новый объект обещания и возвращая его, просто чтобы отбросить его, добавляет код раздувания IMO. Отладка также становится сложнее в случае возникновения исключения (например, синтаксические ошибки или функция вызывается в объекте undefined и т.д.).