Нет, это невозможно сделать.Это сделано специально.
Спецификация Promise A + предназначена для использования в качестве простого и согласованного способа решения асинхронных операций.Одно из ограничений заключается в том, что передача нового обратного вызова на then()
для уже выполненного обещания будет всегда выполняться на более позднем тике в цикле событий, поэтому все будет согласованно.
Добавлениевторичный способ проверить результаты обещания не был бы невозможен.Вероятно, это было бы довольно легко сделать, но есть как минимум две проблемы с добавлением этого в спецификацию:
- Если вы хотите создать спецификацию, вы хотите, чтобы она была такой же простойнасколько это возможно.Сама спецификация фактически определяет только функцию
then()
. - Добавляя эту функцию, вы открываете дверь толпам разработчиков, которые еще больше запутываются в том, что уже трудно понять.
Обещания и асинхронные операции трудно понять людям.Я ежедневно вижу здесь вопросы об обещаниях, а не о том, как их получить.Если бы к обещанию по умолчанию был добавлен не асинхронный способ доступа к результатам обещания, я бы предположил, что это будет еще больше.Это хорошо, чтобы попытаться навязать «правильный путь» ведения дел.
Однако это решение не просто для вас.Вы не застряли там.Вы можете очень легко создать свою собственную версию обещания, которая имеет эту функцию и все еще работает с существующими обещаниями.Пока ваш объект имеет функцию then()
, которая ведет себя в соответствии с Обещаниями / A +, вы можете делать с остальным объектом все, что захотите.