在一个带有viewmodel作用域的屏幕上,我有多个api调用,如viewmodel中的
viewModelScope.launch {
apiCallOne()
}
viewModelScope.launch {
apiCallTwo()
}
viewModelScope.launch {
apiCallThree()
}我的预言家是
override fun authenticate(route: Route?, response: Response): Request? {
return if (response.retryCount < 1) {
val token = refreshToken()
if (token != null)
response.request.newBuilder().header("Authorization", "Bearer $token")
.build()
else
null
} else {
navigateToOnboardingActivity()
null
}
}它运行良好,但当3个api调用被并行启动时,会话被刷新了3次,如何使它像apicallOne()获得401时那样工作,那么它将需要自动诱饵并调用刷新令牌api,此时apicallTwo()和apicallThree()应该在第一个身份验证器获得成功响应后暂停并恢复。
请注意,我不能像这样一次性调用所有apis
viewModelScope.launch{
apiCallOne()
apiCallTwo()
apiCallThree()
}发布于 2022-09-26 11:34:28
您可以使用如下示例:
viewModelScope.launch{
val result1 = async{apiCallOne()}.await()
if (result1.code() != 401) {
apiCallTwo()
apiCallThree()
}
}或者这个:
viewModelScope.launch{
val result1 = withContext(Dispatchers.Default) {apiCallOne()}
if (result1.code() != 401) {
apiCallTwo()
apiCallThree()
}
}https://stackoverflow.com/questions/73852481
复制相似问题