如何解决如何在延续任务中返回失败的任务结果?
我在 Kotlin 中使用 Google 的 Task API 并且面临以下情况:
...
val deleteTask = getItem(id)?.continueWithTask { task ->
if (task.isSuccessful)
task.result?.toObject(Itemmodel::class.java)?.let { deleteFiles(it.media) }
}
deleteTask?.continueWithTask { task ->
if (task.isSuccessful) doSomething()
} ?: doSomething()
...
其中 getItem(id)
返回 Firebase.firestore
获取任务 (Task<DocumentSnapshot>?
) 和 deleteFiles(it.media)
返回 Firebase.storage
删除任务 (Task<Void>?
)。 doSomething()
应在以下情况下调用:删除任务成功或根本不需要删除(deleteFiles(it.media)
将返回 null)。
问题是当 get 任务失败时:在这种情况下,我希望 deleteTask
是一个非空任务(因为 null 对我来说是一个有效的案例,如解释)和 isSuccessful = false
(所以 doSomething()
不会被调用),但我找不到创建虚拟失败任务的方法。我想过返回 get 任务 (if (task.isSuccessful) ... else task
),但它给出了“类型不匹配”错误(这是有道理的,因为 Task<DocumentSnapshot>?
和 Task<Void>?
是不同的类型......)。>
那么,如何在延续任务中返回失败的任务结果?
(有关为什么我需要这个的更多信息:here我用更多细节解释了我的具体案例,但正如我从那里得到的答案所理解的那样,细节只会分散问题的注意力......)
解决方法
好的,我刚刚找到了我一直在寻找的东西:
Tasks API 有一个 Tasks
对象,该对象具有以下函数:forCanceled()
和 forResult()
。在我只研究 Task
类而不知道 Tasks
对象之前...有关详细信息,请参阅 here。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。