С отложенным (с использованием выбранной вами библиотеки):
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));
В чем разница между этими двумя сценариями? Единственное реальное преимущество в том, что вам не нужно заключать весь код в промис? Если это так, то какой смысл в отсрочке?