kotlin 如何从ApolloClient监视方法捕获异常?

g2ieeal7  于 2023-03-30  发布在  Kotlin
关注(0)|答案(1)|浏览(116)

bounty还有6天到期。回答此问题可获得+300声望奖励。stefan.at.wpf希望引起更多关注此问题。

这段代码--没有监视的手动查询执行--正如我所期望的那样抛出了一个异常(由于故意错误的服务器URL,这里没有显示):

try {
    val response = apolloClient.query(MyQuery()).execute()
} catch (e: Exception) {
    Timber.e("exception from manual execution")
    Timber.e(e)
}

然而,如果我像下面的代码一样使用watch(并故意使用相同的错误服务器url),我不会得到任何异常:

try {
    apolloClient.query(MyQuery())
        .watch() // flow
        .collect { response ->
            Timber.i("apollo watch collect called")
        }
} catch (e: Exception) {
    Timber.e("exception from watch execution")
    Timber.e(e)
}

我的错误在哪里?为什么我在第二种情况下没有得到异常?如何在使用watch时捕获错误?

w6mmgewl

w6mmgewl1#

ApolloQueryWatcher示例上使用回调。下面是GitHub上的一个示例
还可以在任何enqueueAndWatch调用中使用.responseFetcher(ApolloResponseFetchers.CACHE_ONLY),以确保在更新该高速缓存时观察程序不会执行任何网络请求,并防止Infinite loops

相关问题