``` fun worksFromDoi(doi: String): IO<WorksResp...
# arrow
b
Copy code
fun 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