代码之家  ›  专栏  ›  技术社区  ›  Alexei

不返回我的结果viewModelScope.launch

  •  0
  • Alexei  · 技术社区  · 6 年前

    android studio 3.6

    Double

    代码段:

     private fun getFuelPriceValue(fuel: String, date: Date): Double? {
            var resultFuelPriceValue: Double? = null
            if (!checkDateNearestFuelPriceMap.keys.contains(date)) {
                viewModelScope.launch(Dispatchers.Main) {
                    val resultFuelPriceEntity = loadFuelPriceEntity(date)
                    checkDateNearestFuelPriceMap.put(date, resultFuelPriceEntity)
                    resultFuelPriceValue =
                        DictionaryService.getFuelPriceValue(fuel, resultFuelPriceEntity!!)
                } // launch
            } else { // load price from local
                resultFuelPriceValue = DictionaryService.getFuelPriceValue(
                    fuel, checkDateNearestFuelPriceMap.get(date)!!
                )
            }
            return resultFuelPriceValue
        }
    
    
    suspend fun loadFuelPriceEntity(date: Date): FuelPrice? {
      // code here
    }
    

    什么时候? checkDateNearestFuelPriceMap 包含日期然后执行 其他的 双倍 . 但当checkDateNearestFuelPriceMap不包含日期时,则执行 loadFuelPriceEntity . 成功执行后,结果加倍。但它返回null。变量 resultFuelPriceValue 无效的

    0 回复  |  直到 6 年前
        1
  •  1
  •   Glenn Sandoval    6 年前

    你不是在等待结果。 launch 协同例程构造函数在不阻塞当前线程的情况下启动一个新的协程,因此您的方法 getFuelPriceValue 马上就回来了 无效的 价值观。