bjonnh
01/06/2019, 8:21 AMfun worksFromDoi(doi: String): IO<WorksResponse> =
binding {
IO { calcDelay() }.bind()
DeferredK<HttpClientCall> {
httpClient.call("$API_URL/works/$doi") {
method = HttpMethod.Get
}
}.map { call ->
IO.async().delay {
updateDelayFromHeaderData(
call.response.headers.get("X-Rate-Limit-Limit"),
call.response.headers.get("X-Rate-Limit-Interval")
)
}
IO.async().delay { updateLastQueryTime() }
when (call.response.status.value) {
200 -> IO<WorksResponse> {
DeferredK<WorksResponse> {
worksAdapter.fromJson(
call.response.readText()
) ?: WorksResponse(status = "failed-locally")
}.handleError { WorksResponse(status = "failed-locally") }.getCompleted()
}
404 -> IO.raiseError<WorksResponse>(NonExistentReference)
else -> IO.raiseError<WorksResponse>(UnManagedReturnCode(call.response.status.value))
}
}.handleError { IO.raiseError<WorksResponse>(DecodingError) }.value().getCompleted()
}.fix().unsafeRunSync()
That's where I am stuck for now when I run that, I get a Exception in thread "main" java.lang.IllegalStateException: This job has not completed yet