in src/ThreadSafeDeferred.cc [93:98]
void ThreadSafeDeferred::Reject(const std::string &errorMsg) {
if (this->fate != EFate::UNRESOLVED) throw "Cannot reject a promise which is not unresolved anymore.";
this->errorMsg = errorMsg;
this->fate = EFate::REJECTED;
this->tsf.Release();
}