如何取消和替换 Kotlin 协程调用

Hec*_*tor 6 android kotlin kotlin-coroutines

我正在我当前的 Android 应用程序中试验 Kotlin 协程。

我有一个用例,用户可以使用远程 RestFul API 搜索文本。

我想实现的目标如下:-

1)。使用类型“ABC”,我在此搜索字符串中启动我的远程 API

viewModelScope.launch {
  repository.searchAPI(searchString)
}
Run Code Online (Sandbox Code Playgroud)

2)。用户现在输入更多,以便我的搜索字符串现在是“ABCXYZ”

我现在希望取消对“ABC”的初始搜索并将其替换为“ABCXYZ”的新搜索字符串

我以为我可以使用此代码...

viewModelScope.launch {

  if (isActive) {
    this.coroutineContext.cancelChildren()
  }

  repository.searchAPI(searchString)
}
Run Code Online (Sandbox Code Playgroud)

然而,这取消了整个过程

我怎样才能达到用最近的搜索字符串替换当前正在执行的搜索的预期结果?

And*_*ana 7

您可以将搜索作业存储在视图模型的字段中,并在新搜索中取消它。它会是这样的:

var searchJob: Job? = null
...
searchJob?.cancel()
searchJob = viewModelScope.launch {
  repository.searchAPI(searchString)
}
Run Code Online (Sandbox Code Playgroud)