コンテキストでNode.jsエラー
V89.3以降でスローにエラー原因を追加する方法
Tom • TypescriptとJavascript •
エラーの詳細コンテキスト
V8 Javascriptエンジンのバージョン9.3以降、開発者はデフォルトのエラーをスローするときに新しいタイプの情報を追加するオプションがあります。単一の引数を指定する代わりに、エラー原因とも呼ばれる一種のエラータイプを追加できるため、このようなエラーをキャッチするためのハンドラーは、エラーの発生元をより適切に判断できます。
より正確には、Error-constructorは、オプションのオブジェクトである2番目のオプションのパラメーターを受け入れます。このパラメーターでは、プロパティ「cause」を使用できます。
例を見てみましょう。
/**
* A simple demonstration how
* the syntax will benefit from
* the error-cause option in
* new Errors.
*
* Note that the example is greatly
* simplified to focus on the
* relevant changes.
*/
async function processImage(props) {
try {
await minifyImage(props);
} catch (err) {
throw new Error('image-minification', { cause: err });
}
try {
await uploadImage(props);
} catch (err) {
throw new Error('image-upload', { cause: err });
}
try {
await cleanUpCache(props);
await notifyUser(props);
} catch (err) {
throw new Error('post-processing', { cause: err });
}
}
//
// ... later in our code ...
//
async function selectAndUploadImage(props){
try {
await processImage(props);
} catch (err) {
console.error(err.cause);
switch(err) {
case 'image-minification':
// handle the minification error,
// which is available by accessing
// 'err.cause'.
break;
case 'image-upload':
// ...
break;
case 'post-processing':
// ...
break;
}
}
}
エラー原因の利点
エラーの原因を使用することの明らかな利点は、コード内の同様のケースを処理するためにカスタムのエラークラスを定義する必要がないことです。一方、エラーの原因に対する標準的なメカニズムがあると、デバッグツールでもうまく機能します。
V8バージョン9.3以降で利用可能
現在の最新のNode.jsバージョン16.4.2はV8の最新の安定バージョンである9.1を使用しているため、執筆時点では、この変更はまだ公開されていません。 Node.jsがバージョン9.3の使用を開始するときに、それに応じてこの記事を更新します。
行動
Feedback
提案された投稿