JavaScriptでPromiseを即座に拒否状態にしたい場合、`Promise.reject()`メソッドを使用します。この記事では、`Promise.reject()`の基本的な使い方と実践的な例を解説します。
Promise.reject()とは
`Promise.reject()`は、与えられた理由(エラー)で即座に拒否される新しいPromiseオブジェクトを生成するメソッドです。主にエラーハンドリングやテストケースの作成で使用されます。
基本的な使い方
// 基本的な使用例
Promise.reject(new Error('エラーが発生しました'))
.catch(error => {
console.log(error.message); // "エラーが発生しました"
});実践的な使用例
1. エラーハンドリング
function fetchData(id) {
if (!id) {
return Promise.reject(new Error('IDが指定されていません'));
}
return fetch(`https://api.example.com/data/${id}`);
}
// 使用例
fetchData()
.then(data => console.log(data))
.catch(error => console.error(error.message)); // "IDが指定されていません"2. 条件分岐での使用
function validateUser(user) {
if (!user.name) {
return Promise.reject(new Error('名前は必須です'));
}
if (!user.email) {
return Promise.reject(new Error('メールアドレスは必須です'));
}
return Promise.resolve(user);
}
// 使用例
const user = { name: '', email: 'test@example.com' };
validateUser(user)
.then(validUser => console.log('ユーザーは有効です'))
.catch(error => console.error(error.message)); // "名前は必須です"3. async/awaitでの使用
async function processUser(userData) {
try {
if (!userData) {
throw await Promise.reject(new Error('ユーザーデータが存在しません'));
}
// 処理続行
} catch (error) {
console.error(error.message);
}
}注意点
1. `Promise.reject()`は即座に拒否状態のPromiseを返すため、非同期処理を待つ必要がありません。
2. エラーオブジェクト以外の値も渡すことができますが、デバッグのしやすさを考慮して`Error`オブジェクトを使用することを推奨します。
3. 必ず`.catch()`または`try/catch`でエラーをハンドリングしましょう。
まとめ
`Promise.reject()`は、Promiseチェーンの中でエラーを適切に処理するための重要なメソッドです。エラーハンドリングやバリデーションチェックなど、様々なユースケースで活用できます。適切なエラーメッセージと共に使用することで、デバッグしやすく保守性の高いコードを書くことができます。