Я все еще не понимаю разницу между вызовом решения resolver() vs execute()? Я вижу как функции, так и термины "разрешить обещание" и "выполнить обещание", отброшенные вокруг.
Когда я должен использовать каждый?
Я все еще не понимаю разницу между вызовом решения resolver() vs execute()? Я вижу как функции, так и термины "разрешить обещание" и "выполнить обещание", отброшенные вокруг.
Когда я должен использовать каждый?
Вы должны использовать resolve. deferredPromise.resolve(nextPromise) означает, что все ожидания deferredPromise теперь ждут nextPromise. Если nextPromise вовсе не является обещанием, оно превращается в исполняемое обещание, которое продолжает сообщать всем, ожидая его, что значение стало доступным.
Метод fulfill - плохая идея, которая будет устаревать и в конечном итоге полностью уйти. fulfill является семантически эквивалентным resolve во всех полезных случаях. Единственная причина существования заключается в том, что deferredPromise.fulfill(value) для людей легче интерпретировать, чем deferredPromise.resolve(value), так как resolve перегружен для обработки как nextPromise, так и finalValue.
Проблема с fulfill вообще существует в том, что deferredPromise.fulfill(rejectedPromise) является семантически парадоксальным.
В общем случае  разрешить означает, что он выполняется успешно или сбой. Именно это вызывает обращение к действиям then. Это может произойти ровно один раз для любого данного обещания.
  выполнить означает "разрешить" успешно. Это вызовет успешные обратные вызовы в действиях then. Друг "выполнить" для отказа -  отклонить.
С другой стороны, вы можете классифицировать статус любого обещания в определенный момент времени как "неразрешенный" (иногда также называемый ожидающий) или "разрешенный", а "разрешенный" имеет суб-статусы "выполнены" и "отклонены". Обещание в статусе "выполнено" имеет значение, а обещание в статусе "отклонено" имеет причину.
Конкретные методы в каждом API, используемые для представления этих понятий, различаются. И, к сожалению, есть много сообщений в блогах и документов, которые смешивают эти термины, в частности, используя "fullfill", когда они подразумевают "разрешение" или наоборот.
Я не очень хорошо знаю Q, но кажется, что его метод resolve действительно выполняет обещание (выделено мной):
Вызов решения с неопределенным значением заставляет обещать быть выполнено с этим значением.
Однако поворот в том, что вы также можете назвать deferred.resolve обещанием, и в этом случае первое обещание более или менее предполагает состояние переданного обещания. Например, если обещанное обещание находится в состоянии ожидания, обещание принимает ожидающее состояние принятого обещания. Это подразумевает слегка нечетную семантику, что метод с именем resolve фактически не разрешает обещание.