2017-04-02 4 views
0

私は約束を広範囲に使用するJavascriptの作成に慣れています。そのため、CompleteFutures(これは明らかに約束と似ています)を試してみたいと思います。JavaでCompletableFutureエラー処理はどのように機能しますか?

Javascriptでは、約束のエラーが自動的にcatchコールバックに渡されます。たとえば:CompletableFuturesで

new Promise(() => { 
    throw new Error('error.'); 
}) 
    .catch(err => console.warn(err)); 

、私は次のことを試してみました:

CompletableFuture.supplyAsync(() -> { 
    someApiRequest(); 
}) 
    .exceptionally(err -> { 
    err.printStackTrace(); 
    return null; 
    }); 

しかし、私はerror: unreported exception IOException; must be caught or declared to be thrownを得ました。 someApiRequestの周りにtry/catchを追加するとエラーが消えます。手動でtry/catchを追加する必要がある場合、exceptionallyのポイントは何ですか? supplyAsyncに渡された関数のエラーを自動的に処理する方法は、exceptionallyによって自動的に処理されますか?

さらに、someApiRequestが同期している場合、supplyAsyncは自動的に別のスレッドでそれを実行する必要がありますか?これは、チェック例外をスローするメソッドを許可しない

public T get(); 

答えて

0

Supplier<T>インタフェースは次のメソッドを定義します。ただし、このメソッドから未確認の例外をスローすることはできます。 exceptionally句は、このケースを処理するためのものです。

関連する問題