[英]Kotlin: wait for Async call to finish and then assign value to var and then return it
我有一个变量loginToken
。 我想赋值为
var loginToken: String = getLoginToken()
以下是我的getLoginToken
function
private fun getLoginToken(context: Context): String {
val sharedPref: SharedPreferences = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE)
var token = sharedPref.getString("token", null)
if (token == null) {
token = LoginManager(activity).getToken(onGetSuccess = {
// I get token here, i want to assign it to token var
}, onGetFailure = {
// I want to set token as empty string
})
}
return token
}
我应该如何为token
赋值并最终在我得到 getToken 调用的结果时才返回它?
您可以使用suspendCancellableCoroutine
将回调方法转换为协程。 所以对于协程方法,我们可以这样做:
private fun getLoginToken(context: Context): String {
val sharedPref: SharedPreferences = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE)
var token = sharedPref.getString("token", null)
if (token == null) {
token = runBlocking { getTokenFromActivity(activity) }
}
return token
}
private suspend fun getTokenFromActivity(activity: Activity) =
suspendCancellableCoroutine {
LoginManager(activity).getToken(onGetSuccess = {
it.completeResume(result)
}, onGetFailure = {
it.completeResume("")
})
}
您还可以使用锁定方法。 例如,使用CountdownLatch
。 (在getToken
function 之前锁定它,并在回调中准备好结果时解锁。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.