Используя CqlSession , меня привели к нам несколько CompletionStage .
Сначала я использовал thenApply , прежде чем перейти к thenApplyAsync , оба предоставляют одинаковую сигнатуру, но когда я использую thenApplyAsync , моя программа больше не компилируется и выдает ошибка ниже.
Ошибка: (80, 22) перегружено значение метода thenApplyAsync с альтернативами:
(x $ 1: java.util.function.Function [_>: com.datastax.oss.driver.api.core.cql.AsyncResultSet, _ <: data.model.stored.Company], x $ 2: java.util. concurrent.Executor) java.util.concurrent.CompletionStage [data.model.stored.Company]
(x $ 1: java.util.function.Function [_>: com.datastax.oss.driver.api.core.cql.AsyncResultSet, _ <: data.model.stored.Company]) java.util.concurrent.CompletionStage [data.model.stored.Company]
не может быть применено к (com.datastax.oss.driver.api.core.cql.AsyncResultSet => data.model.stored.Company)
.thenApplyAsync [StoredCompany] ((_: AsyncResultSet) => компания)
После рассмотрения проблемы оба метода должны иметь одинаковое конечное поведение (за исключением того, что асинхронный один имеет дело с функцией в другом потоке, в данном случае - сессией).
Проблема одинакова на каждом месте, где я сменил thenX на thenXAsync, вот пример:
session
.executeAsync(statement)
//.thenApplyAsync[Boolean](...) >> this one cause the error
.thenApply[Boolean]({ set: AsyncResultSet =>
optionRow(set) match {
case Some(row) => row.getBoolean(CqlConst.AppliedColumnName)
case None => throw new DataNotFoundException(id.toString)
}
})
Ожидаемый результат не будет иметь разницы между этими двумя (за исключением чуть менее эффективного выполнения для асинхронной версии)