Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 共程折叠功能和Firestore存在问题_Firebase_Kotlin_Google Cloud Firestore_Kotlin Coroutines - Fatal编程技术网

Firebase 共程折叠功能和Firestore存在问题

Firebase 共程折叠功能和Firestore存在问题,firebase,kotlin,google-cloud-firestore,kotlin-coroutines,Firebase,Kotlin,Google Cloud Firestore,Kotlin Coroutines,谢谢你花时间阅读我的问题 我目前正在使用Firebase Firestore检索要显示到UI的对象列表,我试图使用挂起功能折叠Firestore服务器调用序列的累计值,但目前我无法将结果值传递到协同程序范围之外 这是我的折叠功能: suspend fun getFormattedList(): FirestoreState { return foldFunctions(FirestoreModel(""), ::getMatchesFromBackend, ...., ....) }

谢谢你花时间阅读我的问题

我目前正在使用Firebase Firestore检索要显示到UI的对象列表,我试图使用挂起功能折叠Firestore服务器调用序列的累计值,但目前我无法将结果值传递到协同程序范围之外

这是我的折叠功能:

suspend fun getFormattedList(): FirestoreState {
    return foldFunctions(FirestoreModel(""), ::getMatchesFromBackend, ...., ....)
}
suspend fun foldFunctions(model: FirestoreModel,
    vararg functions: suspend (FirestoreModel, SuccessData) -> FirestoreState): FirestoreState {

    val successData: SuccessData = functions.fold(SuccessData()) { updatedSuccessData, function ->
            val status = function(model, updatedSuccessData)
            if (status !is FirestoreState.Continue) {
                return status
            }
            updatedSuccessData  <--- I managed to retrieve the list of values correctly here
        }

    val successModel = SuccessData() 
    successData.matchList?.let { successModel.matchList = it } 
    successData.usermatchList?.let { successModel.usermatchList = it } 
    successData.formattedList?.let { successModel.formattedList = it } 

    return FirestoreState.Success(successModel) <--- I cant event get to this line with debugger on
}
这是我的自定义折叠功能:

suspend fun getFormattedList(): FirestoreState {
    return foldFunctions(FirestoreModel(""), ::getMatchesFromBackend, ...., ....)
}
suspend fun foldFunctions(model: FirestoreModel,
    vararg functions: suspend (FirestoreModel, SuccessData) -> FirestoreState): FirestoreState {

    val successData: SuccessData = functions.fold(SuccessData()) { updatedSuccessData, function ->
            val status = function(model, updatedSuccessData)
            if (status !is FirestoreState.Continue) {
                return status
            }
            updatedSuccessData  <--- I managed to retrieve the list of values correctly here
        }

    val successModel = SuccessData() 
    successData.matchList?.let { successModel.matchList = it } 
    successData.usermatchList?.let { successModel.usermatchList = it } 
    successData.formattedList?.let { successModel.formattedList = it } 

    return FirestoreState.Success(successModel) <--- I cant event get to this line with debugger on
}
暂停趣味折叠功能(型号:FirestoreModel,
vararg函数:挂起(FirestoreModel,SuccessData)->FirestoreState:FirestoreState{
val successData:successData=functions.fold(successData()){updatedSuccessData,function->
val状态=函数(模型,更新的成功数据)
如果(状态!为FirestoreState。是否继续){
返回状态
}
updatedSuccessData FirestoreState.MatchesFailure
是CancellationException->FirestoreState.MatchesFailure
else->FirestoreState.MatchesFailure
}
}
}

我的假设是,suspen fun被取消,作用域的延续被阻塞,我尝试在没有vail的情况下使用runBlocking{}。如果有人知道如何绕过这个问题,我会非常感激。

您确定您从未达到过条件触发且函数立即返回的程度吗?尝试在那里添加一个调试器。@AnimeshSahu我用断点轰炸了我所有的代码,唯一没有触发的一行是fold函数的返回,我编辑我的问题以更清楚地表示这一点。TY您确定您从未达到过条件被触发且函数立即返回的点吗?尝试在那里添加一个调试器。@AnimeshSahu我用断点轰炸了我所有的代码,唯一没有触发的一行是fold函数的返回,我编辑我的问题以更清楚地表示这一点。泰