CompletionStage / CompletingFuture обработка исключений [дубликат]

Конечно, есть много таких подходов, как синхронный запрос, обещание, но из моего опыта я думаю, что вы должны использовать подход обратного вызова. Естественно, что асинхронное поведение Javascript. Итак, ваш фрагмент кода можно переписать немного иначе:

function foo() {
    var result;

    $.ajax({
        url: '...',
        success: function(response) {
            myCallback(response);
        }
    });

    return result;
}

function myCallback(response) {
    // Does something.
}
20
задан Lukas 11 December 2014 в 19:51
поделиться

2 ответа

Это поведение указано в документации по классу CompletionStage (четвертая пуля) :

Метод handle дополнительно разрешает этап для вычисления результата замены, который может обеспечить дальнейшую обработку другими зависимыми этапами. Во всех остальных случаях, если вычисление этапа внезапно прекращается с (неконтролируемым) исключением или ошибкой, то все зависимые этапы, требующие его завершения, также выполняются исключительно с помощью CompletionException , содержащего исключение в качестве причины .

Не удивительно, если вы считаете, что вы можете хотеть знать, была ли эта сцена, вы вызвали exceptionally, неудачно или один из ее прямых или косвенные предпосылки.

22
ответ дан Holger 27 August 2018 в 15:52
поделиться

да, поведение ожидается, но если вы хотите исходное исключение, которое было выбрано с одного из предыдущих этапов, вы можете просто использовать this-

CompletableFuture<String> future = new CompletableFuture<>();

future.completeExceptionally(new RuntimeException());

future.thenApply(v-> v).exceptionally(e -> {
        System.out.println(e.getCause()); // returns a throwable back
        return null;
});
4
ответ дан Gagandeep Kalra 27 August 2018 в 15:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: