# QtPromise::connect

Since: 0.5.0

(1) QtPromise::connect(QObject* sender, Signal(T) resolver) -> QPromise<T>
(2) QtPromise::connect(QObject* sender, Signal(T) resolver, Signal(R) rejecter) -> QPromise<T>
(3) QtPromise::connect(QObject* sender, Signal(T) resolver, QObject* sender2, Signal(R) rejecter) -> QPromise<T>

Creates a QPromise<T> that will be fulfilled with the resolver signal's first argument, or a QPromise<void> if resolver doesn't provide any argument.

The second (2) and third (3) variants of this method will reject the output promise when the rejecter signal is emitted. The rejection reason is the value of the rejecter signal's first argument or QPromiseUndefinedException if rejected doesn't provide any argument.

Additionally, the output promise will be automatically rejected with QPromiseContextException if sender is destroyed before the promise is resolved (that doesn't apply to sender2).

class Sender : public QObject
{
Q_SIGNALS:
    void finished(const QByteArray&);
    void error(ErrorCode);
};

auto sender = new Sender{};
auto output = QtPromise::connect(sender, &Sender::finished, &Sender::error);

// 'output' resolves as soon as one of the following events happens:
// - the 'sender' object is destroyed, the promise is rejected
// - the 'finished' signal is emitted, the promise is fulfilled
// - the 'error' signal is emitted, the promise is rejected

// 'output' type: QPromise<QByteArray>
output.then([](const QByteArray& res) {
    // 'res' is the first argument of the 'finished' signal.
}).fail([](ErrorCode error) {
    // 'error' is the first argument of the 'error' signal.
}).fail([](const QPromiseContextException& error) {
    // the 'sender' object has been destroyed before any of
    // the 'finished' or 'error' signals have been emitted.
});

See also the Qt Signals section for more examples.