Для этого есть две причины.
Во-первых, это помогает уловить то, что, вероятно, является ошибкой, на ранней стадии - вблизи места, где эта ошибка совершается. Отложенный вызывается с результатом, который затем передается всем его обратным вызовам. Если вы сделаете сам результат Отложенным, тогда эти обратные вызовы мало что могут сделать, когда они вызываются. Это приводит меня к следующей причине.
Во-вторых, Deferreds поддерживают chaining , который обрабатывает наиболее распространенные варианты использования, которые могут иметь место для передачи в Deferred. При наличии двух Deferreds, a и b, создание цепочки заставляет a приостанавливать обработку собственной цепочки обратных вызовов до тех пор, пока b не даст результат, а затем возобновляет свою цепочку обратных вызовов с результатом b. Это то, что происходит, когда обратный вызов на Отложенном возвращает Отложенное. Это также можно сделать явно с помощью Deferred.chainDeferred
.