待回复 QML 类型
表示异步结果的程序对象。 更多信息...
导入语句 | import QtInterfaceFramework |
实例化 | QIfPendingReply |
属性
- resultAvailable : bool
- success : bool
- valid : bool
- value : var
- watcher : QIfPendingReplyWatcher*
方法
- setFailed()
- setSuccess(var value)
- then(success, failed)
详细描述
待回复是提供异步结果的一种方法。它可以被用作异步函数的返回值。
QML API 与 JavaScript Promises 非常相似。
本文档展示了如何在 QML 中使用待回复,以及如何在异步结果准备好后执行代码。
注意:不支持在 QML 中创建待回复对象。该对象应从 C++ 创建并将其作为结果返回到 QML。有关从 C++ 使用它的更多信息,请参见 QIfPendingReply 文档。
从 C++ 创建待回复时,它还没有设置结果,并且 resultAvailable 属性为 false
。待回复的结果只能设置一次,它可以表示失败(setFailed)或成功(setSuccess)调用。这可以通过 success 属性来检查。实际结果可以通过 value 属性获得,如果没有结果可用或回复失败,则返回 undefined。
使用待回复
如上所述,待回复应作为 C++ 中执行的操作的返回值使用。要通知回复结果何时可用,有两种方式
然后方法
与 JavaScript Promise 类似,待回复是可用的,这意味着它提供了一个 then 方法。此方法可用于添加当回复成功或失败时执行的回调。
import QtQuick import QtInterfaceFramework Text { id: root text: "not ready" Component.onCompleted: { var asyncReply = TestObject.asyncFunction(); asyncReply.then(function(value) { root.text = "reply ready: " + value }, function() { root.text = "reply failed" }) } }
这个简单的QML片段调用C++函数TestObject::asyncFunction(),该函数返回一个PendingReply。请参阅C++部分了解如何编写此类函数以及如何从C++使用PendingReply。
使用then方法注册两个回调。第一个回调是结果回调,以回复值为参数。这将相应地更新文本元素。第二个参数是失败回调,因为它没有有效的回复值,所以不接受任何参数。
如果不关心失败状态,也可以不添加任何回调,例如。
asyncReply.then(function(value) { root.text = "reply ready: " + value })
以类似的方式,只需注册失败回调,只需将undefined作为第一个参数传递给函数即可。
asyncReply.then(undefined, function() { root.text = "reply failed" })
同步结果
当在API中使用PendingReply对象时,相应的函数不能立即提供结果。但对于输入验证,函数可以立即返回错误状态。为此,PendingReply对象提供了属性resultAvailable和success,用于检查对象传递到QML时的该属性。
在QML中对每个PendingReply的使用进行检查可能会很烦琐,并产生大量的模板代码。因此,PendingReply与JavaScript Promise类似,即使在结果可用的情况下也会执行回调。
信号和槽
尽管then方法是QML中推荐的用法,但PendingReply也提供了信号。为了尽可能减轻PendingReply的负担,它使用Q_GADGET,不能直接提供信号,但通过QIfPendingReplyWatcher类提供信号。可以通过watcher属性访问QIfPendingReplyWatcher。
注意: QIfPendingReplyWatcher 由PendingReply拥有。在PendingReply之外保存监听器是不安全的,因为它在所有此PendingReply对象的副本被销毁后被销毁。
属性文档
resultAvailable : bool |
保留是否已设置结果
使用setSuccess()或setFailed()设置结果后,此属性为true
。
success : bool |
保留回复是否成功
如果通过调用setSuccess()设置回复,此属性为true
。
valid : bool |
保留PendingReply是否有效
如果使用模板类QIfPendingReply以外的模板创建PendingReply,监听器可以无效。
value : var |
保留PendingReply的当前值
如果尚未有结果可用或响应失败,则返回默认构造的QVariant()。否则,返回一个包含结果的QVariant。
watcher : QIfPendingReplyWatcher* |
保存对PendingReply的监视者。
注意:返回的QIfPendingReplyWatcher由PendingReply及其所有副本拥有。如果所有PendingReply副本都被删除,则其QIfPendingReplyWatcher也将被删除。
方法文档
setFailed() |
setSuccess(var value) |
then(success, failed) |
设置JavaScript回调,一旦传递结果就调用。如果响应成功,将调用success回调,否则调用failed回调。
success回调可以接受响应值作为参数。
请参阅The then method的示例用法。
调用此函数多次将覆盖现有的回调。
© 2024 Qt公司有限公司。 herein包括的文档贡献是各自所有者的版权。提供的文档是根据GNU自由文档许可第1.3版(由自由软件基金会发布)的条款许可的。Qt及其相应商标是Qt公司有限公司在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。