mirror of
https://github.com/BlackMATov/promise.hpp.git
synced 2025-12-16 22:19:38 +07:00
@@ -416,6 +416,21 @@ namespace promise_hpp
|
||||
[](auto&& v) { return std::forward<decltype(v)>(v); },
|
||||
std::forward<RejectF>(on_reject));
|
||||
}
|
||||
|
||||
//
|
||||
// finally
|
||||
//
|
||||
|
||||
template < typename FinallyF >
|
||||
promise<T> finally(FinallyF&& on_finally) {
|
||||
return then([f = on_finally](auto&& v) {
|
||||
std::invoke(std::move(f));
|
||||
return std::forward<decltype(v)>(v);
|
||||
}, [f = on_finally](std::exception_ptr e) -> T {
|
||||
std::invoke(std::move(f));
|
||||
std::rethrow_exception(e);
|
||||
});
|
||||
}
|
||||
private:
|
||||
class state;
|
||||
std::shared_ptr<state> state_;
|
||||
@@ -837,6 +852,20 @@ namespace promise_hpp
|
||||
[](){},
|
||||
std::forward<RejectF>(on_reject));
|
||||
}
|
||||
|
||||
//
|
||||
// finally
|
||||
//
|
||||
|
||||
template < typename FinallyF >
|
||||
promise<void> finally(FinallyF&& on_finally) {
|
||||
return then([f = on_finally]() {
|
||||
std::invoke(std::move(f));
|
||||
}, [f = on_finally](std::exception_ptr e) {
|
||||
std::invoke(std::move(f));
|
||||
std::rethrow_exception(e);
|
||||
});
|
||||
}
|
||||
private:
|
||||
class state;
|
||||
std::shared_ptr<state> state_;
|
||||
|
||||
Reference in New Issue
Block a user