エラー処理
エラー処理は、すべてのプログラミングで不可欠な部分です。
他のライブラリとは異なり、FxTS のエラー処理は特定のエラー処理方法を知る必要がありません。 FxTS は標準プロトコルに従っているため、try-catchで簡単にエラーを処理できます。 これは同期/非同期エラーの伝播が可能であることを意味するため、 sentryやさまざまなサードパーティのエラーロギングおよびデバッグツールと一緒に使用するのに適しています。
同期エラー処理
typescript
import { map, pipe, take, toArray, toAsync } from "@fxts/core";
const syncError = (a) => {
throw new Error(`err ${a}`);
};
try {
pipe(
[1, 2, 3, 4, 5],
map(syncError),
filter((a) => a % 2 === 0),
toArray,
);
} catch (err) {
// エラー処理
}非同期エラー処理
typescript
import { filter, map, pipe, toArray, toAsync } from "@fxts/core";
const fetchAsyncError = (a) => Promise.reject(`err ${a}`);
try {
await pipe(
Promise.resolve([1, 2, 3, 4, 5]),
toAsync,
map(fetchAsyncError),
filter((a) => a % 2 === 0),
toArray,
);
} catch (err) {
// エラー処理
}
try {
await pipe(
[
Promise.resolve(1),
Promise.resolve(2),
Promise.resolve(3),
Promise.resolve(4),
],
toAsync,
map(fetchAsyncError),
filter((a) => a % 2 === 0),
toArray,
);
} catch (err) {
// エラー処理
}並行エラー処理(Concurrent を使用)
同時リクエスト状態では、以前にエラーが発生してもconcurrentリクエスト数だけAsyncIterableが評価されます。 これはPromise.allで非同期リクエストを実行する場合と同じです。 Promise.allは 1 つが失敗してもすべて実行されます。
typescript
import { concurrent, filter, map, pipe, toArray, toAsync } from "@fxts/core";
const fetchAsyncError = (a) => {
if (a === 3) {
return Promise.reject(`err ${a}`);
}
return a;
};
try {
await pipe(
[
Promise.resolve(1),
Promise.resolve(2),
Promise.resolve(3), // この項目が評価されると、`map`関数がエラーをスローします。
Promise.resolve(4), // この項目も評価されます。
Promise.resolve(5), // この項目からは評価されません。
Promise.resolve(6),
],
toAsync,
map(fetchAsyncError),
filter((a) => a % 2 === 0),
concurrent(2), // 2つずつリクエスト
toArray,
);
} catch (err) {
// エラー処理
}