Я пытаюсь использовать Kotlin Kovenant, потому что хочу, чтобы решение на основе обещаний отслеживало мои модифицированные вызовы.
То, что я сделал первым, было:
all (
walkingRoutePromise,
drivingRoutePromise
) success { responses ->
//Do stuff with the list of responses
}
, где обещания, которые я передаю, - это те, которые были выполнены после завершения моих звонков. Однако «ответы» - это список двух одинаковых объектов. При отладке я могу подтвердить, что два разных объекта с разными значениями передаются в соответствующие методы разрешения. Однако Ковенант возвращает два одинаковых объекта (одно и то же место в памяти)
Моя следующая попытка была такой:
task {
walkingRoutePromise
} then {
var returnval = it.get()
walkingDTO = returnval.deepCopy()
drivingRoutePromise
} success {
val returnval = it.get()
drivingDTO = returnval.deepCopy()
mapRoutes = MapRoutes(walkingDTO!!, drivingDTO!!)
currentRoute = mapRoutes!!.walking
callback()
}
Там, где я пытался делать звонки по одному и выполнять глубокие копии результатов. Это сработало для первого ответа, но потом я обнаружил, что it.get () в блоке успеха - блоке успеха второго вызова - это тот же неизмененный объект, который я получаю от it.get () в блоке then , Кажется, что Ковенант реализован так, чтобы использовать один объект для всех своих разрешений, но после однократного разрешения единственный объект, который он использует для разрешений, не может быть изменен. Что я должен делать, если я хочу получить доступ к уникальным значениям из обещания (объекта)? Похоже, очень сломанная система.