Разница между обещанием и отложенным при заключении всего блока кода в обещание?

С отложенным (с использованием выбранной вами библиотеки):

const deferred = library.defer();
if (condition) deferred.resolve('success');
else deferred.reject('fail');
deferred.promise.then((result) => console.log(result));

Просто завернув в обещание:

new Promise((resolve, reject) => {
  if (condition) resolve('success');
  else reject('fail');
}).then((result) => console.log(result));

В чем разница между этими двумя сценариями? Единственное реальное преимущество в том, что вам не нужно заключать весь код в промис? Если это так, то какой смысл в отсрочке?


person m0meni    schedule 20.12.2015    source источник
comment
Отложенные ссылки устарели, вот хорошая информация по основным причинам, почему их лучше не использовать: github.com/petkaantonov/bluebird/wiki/ .   -  person bardzusny    schedule 21.12.2015
comment
@bardzusny: Нет, это не имеет ничего общего с антишаблоном построения явного обещания.   -  person Bergi    schedule 21.12.2015


Ответы (1)


Отложенный — это объект, который имеет методы resolve и reject, позволяющие изменять его состояние. Обещание - нет.

Что касается генерирования промисов обоими способами, то, как правило, не должно быть никакой разницы. Я предпочитаю синтаксис промисов, поскольку он оборачивает вашу логику в функцию и позволяет избежать загрязнения внешней области видимости переменными, но это все.

person Louay Alakkad    schedule 20.12.2015
comment
new Promise также приведет к отклонению обещания в случае синхронной ошибки, в то время как функция, содержащая отложенное, может иногда отклонить и иногда бросить. - person loganfsmyth; 21.12.2015
comment
Я думал об этом, но не был уверен. Не могли бы вы дать мне ссылку? Я знаю, что это работает в thens. - person Louay Alakkad; 21.12.2015
comment
Если вам нужны подробности, ecma-international.org/ecma- 262/6.0/#sec-promise-executor шаг 10 будет основным источником. - person loganfsmyth; 21.12.2015