# QtPromise::attempt
Since: 0.4.0
QtPromise::attempt(Functor functor, Args...) -> QPromise<R>
// With:
// - Functor: Function(Args...) -> R | QPromise<R>
Calls functor
immediately and returns a promise fulfilled with the value returned by functor
.
Any synchronous exceptions will be turned into rejections on the returned promise. This is a
convenient method that can be used instead of handling both synchronous and asynchronous exception
flows.
The type R
of the output
promise depends on the type returned by the functor
function. If
functor
returns a promise (or QFuture
), the output
promise is delayed and will be resolved
by the returned promise.
QPromise<QByteArray> download(const QUrl& url);
QPromise<QByteArray> process(const QUrl& url)
{
return QtPromise::attempt([&]() {
if (!url.isValid()) {
throw InvalidUrlException{};
}
return download(url);
}
}
auto output = process(url);
// 'output' type: QPromise<QByteArray>
output.then([](const QByteArray& res) {
// {...}
}).fail([](const InvalidUrlException& error) {
// {...}
});