暂停执行协程以等待回调

编程入门 行业动态 更新时间:2024-10-26 05:29:35
本文介绍了暂停执行协程以等待回调的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

最近,我在我的项目中应用了Cooutine,看起来一切都很好,但今天我遇到了一个问题[使用Coroutine+Retrofit将文件/图像上传到服务器][1] Cooutine+Retrofit上传文件似乎没有解决方案,所以必须使用回调进行改造。

//Api interface interface UploadFileApiKotlin { @Multipart @POST("/uploadFileApi") fun uploadFiles( @Part listUri: List<MultipartBody.Part> ): Call<Response<List<FileResponse>?>> } //ViewModel class serviceScope.launch { //Insert into db repository.insertNewExtAct() //Send data into server. val call = RequestHelper.getUpLoadFilesKotlinRequest().uploadFiles(partList) call.enqueue(object : Callback<Response<List<FileResponse>?>> { override fun onResponse( call: Call<Response<List<FileResponse>?>>, response: Response<Response<List<FileResponse>?>> ) { TODO("Not yet implemented") } override fun onFailure( call: Call<Response<List<FileResponse>?>>, t: Throwable ) { TODO("Not yet implemented") } }) //Wait for response from server and do logic }

我的问题是:如何挂起协程的执行以等待Retrofit的回调?

谢谢你兄弟。 [1]:Upload file/image into server using Coroutine + Retrofit

推荐答案

您可以使用suspendCoroutine或suspendCancellableCoroutine处理回调:

serviceScope.launch { //Insert into db repository.insertNewExtAct() //Send data into server. uploadFile() //Wait for response from server and do logic } suspend fun uploadFile() = suspendCoroutine<Response<List<FileResponse>?>> { continuation -> val call = RequestHelper.getUpLoadFilesKotlinRequest().uploadFiles(partList) call.enqueue(object : Callback<Response<List<FileResponse>?>> { override fun onResponse( call: Call<Response<List<FileResponse>?>>, response: Response<Response<List<FileResponse>?>> ) { // Resume coroutine with a value provided by the callback continuation.resumeWith(response.data) } override fun onFailure( call: Call<Response<List<FileResponse>?>>, t: Throwable ) { continuation.resumeWithException(t) } }) }

suspendCoroutine挂起它执行的协程,直到我们决定通过调用适当的方法继续-Continuation.resume...。suspendCoroutine主要用于我们有一些带有回调的旧代码。

还有suspendCancellableCoroutine生成器函数,它的行为类似于suspendCoroutine,但有额外的功能-提供CancellableContinuation对块的实现。

更多推荐

暂停执行协程以等待回调

本文发布于:2023-11-23 11:13:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1621248.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:回调

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!