mirror of
https://github.com/simonbrunel/qtpromise.git
synced 2024-11-22 19:00:05 +08:00
18739bd8e0
Split the root README.md in multiple Markdown files (in the `docs/` folder) to make easier reading, editing and extending the documentation. An online version is also available on netlify (https://qtpromise.netlify.com). Building it requires Node.js installed, then: - npm install -g gitbook-cli - gitbook install ./ - gitbook build . dist/docs
1.7 KiB
1.7 KiB
QtConcurrent
QtPromise integrates with QtConcurrent to make easy chaining QFuture with QPromise.
Convert
Converting QFuture<T>
to QPromise<T>
is done using the qPromise
helper:
QFuture<int> future = QtConcurrent::run([]() {
// {...}
return 42;
});
QPromise<int> promise = qPromise(future);
or simply:
auto promise = qPromise(QtConcurrent::run([]() {
// {...}
}));
Chain
Returning a QFuture<T>
in then
or fail
automatically translate to QPromise<T>
:
QPromise<int> input = ...
auto output = input.then([](int res) {
return QtConcurrent::run([]() {
// {...}
return QString("42");
});
});
// output type: QPromise<QString>
output.then([](const QString& res) {
// {...}
});
The output
promise is resolved when the QFuture
is finished.
Error
Exceptions thrown from a QtConcurrent thread reject the associated promise with the exception as the reason. Note that if you throw an exception that is not a subclass of QException
, the promise with be rejected with QUnhandledException
(this restriction only applies to exceptions thrown from a QtConcurrent thread, read more).
QPromise<int> promise = ...
promise.then([](int res) {
return QtConcurrent::run([]() {
// {...}
if (!success) {
throw CustomException();
}
return QString("42");
});
}).fail(const CustomException& err) {
// {...}
});