| 56 | } |
| 57 | |
| 58 | void ResolvablePromise::onComplete(const Ref<PromiseCallback>& callback) { |
| 59 | std::unique_lock<Mutex> lock(_mutex); |
| 60 | if (_canceled) { |
| 61 | return; |
| 62 | } |
| 63 | |
| 64 | if (!_result.empty()) { |
| 65 | auto result = _result; |
| 66 | lock.unlock(); |
| 67 | |
| 68 | if (result) { |
| 69 | callback->onSuccess(result.value()); |
| 70 | } else { |
| 71 | callback->onFailure(result.error()); |
| 72 | } |
| 73 | |
| 74 | return; |
| 75 | } |
| 76 | |
| 77 | _callbacks.emplace_back(callback); |
| 78 | } |
| 79 | |
| 80 | bool ResolvablePromise::isCancelable() const { |
| 81 | std::lock_guard<Mutex> lock(_mutex); |