#pragma once #include #include #include #include class QTimer; namespace LtsUtils { typedef std::function RawResultFunction; typedef const RawResultFunction &ResultFunction; class LTSUTILSCORE_EXPORT Promise : public QObject { Q_OBJECT public: Promise(const std::function &function, QObject *parent = nullptr); void setFunction(const std::function &function); void resolve(const QVariant &value = QVariant()); void reject(const QVariant &value = QVariant()); void setTimeout(int interval); Promise &resolved(ResultFunction resolveFn); Promise &rejected(ResultFunction rejectFn); private: RawResultFunction m_resolveFn; RawResultFunction m_rejectFn; bool m_functionAlreadySet; QTimer *m_timeout; bool m_resultSet; bool m_timeoutSet; private slots: void slotTimeout(); }; }