# 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) {
    // {...}
});