У меня есть две операции, которые выполняются с помощью сопрограмм. Получение данных из хранилища данных настроек и выполнение вызова API (модернизация). Сетевой вызов зависит от знания того, какой тип единицы измерения предпочитает пользователь (по Фаренгейту, по Цельсию), поэтому мне нужно сначала получить эти данные, прежде чем запускать сетевой вызов.
Я не уверен, что Здесь я создаю состояние гонки или вызов функции приостановки, как показано ниже, всегда будет следовать правильному порядку вызова.
private suspend fun getUnits(): Units {
var openWeatherUnits: Units = Units.FAHRENHEIT // default
// Get Units
dataStore.readStringDataStore(UNITS_KEY).first().let { units ->
if (units != null) {
println("units: $units")
openWeatherUnits = Units.valueOf(units)
}
}
return openWeatherUnits
}
private fun getWeatherData() {
viewModelScope.launch(Dispatchers.IO) {
val units = getUnits()
// Make API call
val response = apiService.getCurrentWeather(
BuildConfig.OPEN_WEATHER_KEY,
units.value
)
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... operations