【问题标题】:How to return failed task result in continuation task?如何在继续任务中返回失败的任务结果?
【发布时间】:2021-11-05 21:41:02
【问题描述】:

我在 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 任务(因为 null 对我来说是一个有效的情况,正如所解释的那样)与 isSuccessful = false (所以 @987654333 @ 不会被调用),但我找不到创建虚拟失败任务的方法。我考虑过返回 get 任务 (if (task.isSuccessful) ... else task),但它给出了“类型不匹配”错误(这是有道理的,因为 Task<DocumentSnapshot>?Task<Void>? 是不同的类型...)。

那么,我怎样才能在继续任务中返回失败的任务结果?

(有关我为什么需要这个的更多信息:here我用更多细节解释了我的具体案例,但正如我从那里得到的答案中理解的那样,细节只会分散问题的注意力......)

【问题讨论】:

    标签: firebase kotlin google-cloud-firestore firebase-storage google-tasks-api


    【解决方案1】:

    好的,我刚刚找到了我一直在寻找的东西: Tasks API 有一个 Tasks 对象,该对象具有以下功能:forCanceled() & forResult()。之前我只研究了Task类,不知道Tasks对象...更多信息请看here

    【讨论】:

      猜你喜欢
      • 2021-04-20
      • 2017-01-30
      • 2021-06-05
      • 1970-01-01
      • 2023-03-14
      • 2011-07-20
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多