更新情報
JSアクションからの別アクション実行失敗時のハンドリングが簡単になりました!

JavaScriptアクションのexecuteAction関数にthrowOnFailureオプションを追加しました
JavaScriptアクションのexecuteAction関数に、アクションの実行失敗時のハンドリングをより簡潔にするための新しいオプションthrowOnFailureと、関連するExecuteActionFailureErrorクラスを追加しました。
これにより、複数のアクションを組み合わせた複雑なワークフローにおけるエラーハンドリングの記述が行いやすくなります。
※本機能はJavaScriptアクションでのみ利用可能です。 ビューのexecuteAction関数ではご利用いただけませんのでご注意ください。
throwOnFailureオプション
従来、executeActionで呼び出したアクションが失敗したかどうかを判定するには、戻り値のfailureプロパティの有無を確認する必要がありました 。複数のアクションを連続して実行する場合、それぞれのアクション呼び出しの直後でfailureプロパティのチェックが必要となります 。このようなコードは、冗長に感じる方もいらっしゃると思います。また、failureプロパティの確認が漏れやすいという課題がありました。
import { executeAction } from "@basemachina/action";
export default async () => {
const results1 = await executeAction("action1");
if (results1[0].failure) {
throw new Error("アクション1の実行に失敗しました");
}
const results2 = await executeAction("action2");
if (results2[0].failure) {
throw new Error("アクション2の実行に失敗しました");
}
return results2[0].success;
};
executeActionの第3引数optionsにthrowOnFailure: trueを設定することで、アクションの実行が失敗した場合に自動的にエラーがthrowされるようになります 。
import { executeAction } from "@basemachina/action";
export default async () => {
const results1 = await executeAction("action1", undefined, {
throwOnFailure: true,
});
const results2 = await executeAction("action2", undefined, {
throwOnFailure: true,
});
return results2[0].success;
};
ExecuteActionFailureError
実行に失敗したアクションの結果の詳細を取得したい場合は、try ... catchとExecuteActionFailureErrorを合わせて利用します。ExecuteActionFailureErrorは、executeAction関数によってthrowされるエラーのcauseプロパティに含まれています。
import {
executeAction,
ExecuteActionFailureError,
} from "@basemachina/action";
export default async () => {
try {
const results = await executeAction("action", undefined, {
throwOnFailure: true,
});
return results[0].success;
} catch (err) {
if (err.cause instanceof ExecuteActionFailureError) {
throw new Error(
`アクションの実行に失敗しました: ${err.cause.failureResult.failure.message}`
);
}
throw err;
}
};
これらの機能の詳細については、executeAction関数のドキュメントをご参照ください。