Как отменить и заменить Kotlin Coroutine Call - PullRequest
2 голосов
/ 08 октября 2019

Я экспериментирую с Kotlin Coroutines в моем текущем приложении для Android.

У меня есть случай, когда пользователь может искать текст с помощью удаленного API RestFul.

Что бы я хотелдостичь следующего: -

1). Используйте типы "ABC", и я запускаю свой Remote API в этой строке поиска

viewModelScope.launch {
  repository.searchAPI(searchString)
}

2). Теперь пользователь печатает больше, так что моя строка поиска теперь "ABCXYZ"

Теперь я хочу отменить начальный поиск "ABC" и заменить его новой строкой поиска "ABCXYZ"

Я думал, что смогу использовать этот код ...

viewModelScope.launch {

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

  repository.searchAPI(searchString)
}

Однако это отменяет весь процесс

Как мне достичь желаемого результата, заменив текущий выполняемый поиск на самый последний? строка поиска?

Ответы [ 2 ]

4 голосов
/ 08 октября 2019

Вы можете сохранить свою поисковую работу в поле просмотра модели и отменить ее при новом поиске. Это будет примерно так:

var searchJob: Job? = null
...
searchJob?.cancel()
searchJob = viewModelScope.launch {
  repository.searchAPI(searchString)
}
0 голосов
/ 08 октября 2019

Вы можете отменить вызов сопрограммы следующим образом

 val job =viewModelScope.launch {
      repository.searchAPI(searchString)
    }
job.cancel() // cancels the job
...