MST

星途 面试题库

面试题:Kotlin JavaScript开发中的异步处理

在Kotlin JavaScript项目中,假设需要发起多个异步网络请求,并且在所有请求完成后执行某个操作。请使用Kotlin协程的方式实现这一功能,并解释关键代码的作用。
29.1万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
import kotlinx.coroutines.*

fun main() = runBlocking {
    // 创建多个异步任务
    val job1 = async { makeRequest1() }
    val job2 = async { makeRequest2() }
    // 等待所有任务完成
    val result1 = job1.await()
    val result2 = job2.await()
    // 所有请求完成后执行的操作
    performActionAfterAllRequests(result1, result2)
}

suspend fun makeRequest1(): String {
    delay(1000) // 模拟网络请求延迟
    return "Request 1 completed"
}

suspend fun makeRequest2(): String {
    delay(1500) // 模拟网络请求延迟
    return "Request 2 completed"
}

fun performActionAfterAllRequests(result1: String, result2: String) {
    println("$result1 and $result2, now perform action.")
}

关键代码解释:

  1. async:用于创建一个异步任务,它会立即返回一个 Deferred 对象,这个对象代表一个尚未完成的异步计算。async 块中的代码会在一个新的协程中执行。
  2. await:调用 await 方法会暂停当前协程,直到对应的 Deferred 对象所代表的异步任务完成,并返回该异步任务的结果。在上述代码中,job1.await()job2.await() 会等待 makeRequest1makeRequest2 执行完毕,并获取它们的返回值。
  3. runBlocking:在 main 函数中使用 runBlocking 来启动一个顶层协程,它会阻塞当前线程,直到其内部的所有协程执行完毕。在实际的Android或其他应用场景中,可能会使用 GlobalScope.launch 等其他方式来启动协程,避免阻塞主线程。
  4. suspend:标记函数为挂起函数,挂起函数可以暂停执行并将控制权交回给调用者,直到某个条件满足(如异步操作完成)。makeRequest1makeRequest2 函数被标记为 suspend,因为它们模拟了异步的网络请求操作。
  5. delay:也是一个挂起函数,用于暂停当前协程指定的时间(以毫秒为单位),在这里用于模拟网络请求的延迟。