徹底解説!TypeScriptでasync/await構文でPromiseをリジェクトする方法
async/await構文でリジェクトする方法
この解説では、async/await 構文で Promise をリジェクトする方法について、以下の内容を説明します。
async/await 構文とは?
Promise のリジェクト
reject()
関数throw
キーワード
まとめ
async/await 構文は、非同期処理を同期処理のように記述できる構文です。
async キーワードを付けた関数は非同期処理を表し、await キーワードは非同期処理の完了を待機します。
Promise をリジェクトするには、以下の 2 つの方法があります。
reject()
関数は、Promise を拒否状態に移行させ、エラー情報を渡します。
async function myFunction() {
try {
// 非同期処理
await somethingAsync();
} catch (error) {
// エラー処理
return Promise.reject(error);
}
}
throw
キーワードを使用して、エラーを発生させることで、Promise を拒否することができます。
async function myFunction() {
try {
// 非同期処理
await somethingAsync();
} catch (error) {
// エラー処理
throw new Error('エラーメッセージ');
}
}
async function myFunction() {
try {
// 非同期処理
const result = await somethingAsync();
// 結果の検証
if (!result) {
throw new Error('エラーメッセージ');
}
// 成功処理
return result;
} catch (error) {
// エラー処理
return Promise.reject(error);
}
}
myFunction()
.then((result) => {
// 成功時の処理
console.log(result);
})
.catch((error) => {
// エラー時の処理
console.error(error.message);
});
reject()
関数または throw
キーワードを使用して、Promise を拒否し、エラー情報を渡すことができます。
async function myFunction(param: string): Promise<string> {
try {
// 非同期処理
const result = await somethingAsync(param);
// 結果の検証
if (!result) {
return Promise.reject(new Error('エラーメッセージ'));
}
// 成功処理
return result;
} catch (error) {
// エラー処理
return Promise.reject(error);
}
}
myFunction('パラメータ')
.then((result) => {
// 成功時の処理
console.log(result);
})
.catch((error) => {
// エラー時の処理
console.error(error.message);
});
async function myFunction(param: string): Promise<string> {
try {
// 非同期処理
const result = await somethingAsync(param);
// 結果の検証
if (!result) {
throw new Error('エラーメッセージ');
}
// 成功処理
return result;
} catch (error) {
// エラー処理
throw error;
}
}
myFunction('パラメータ')
.then((result) => {
// 成功時の処理
console.log(result);
})
.catch((error) => {
// エラー時の処理
console.error(error.message);
});
async function myFunction(): Promise<void> {
try {
// 複数の非同期処理
const result1 = await somethingAsync1();
const result2 = await somethingAsync2();
// 結果の検証
if (!result1 || !result2) {
throw new Error('エラーメッセージ');
}
// 成功処理
// ...
} catch (error) {
// エラー処理
return Promise.reject(error);
}
}
myFunction()
.then(() => {
// 成功時の処理
})
.catch((error) => {
// エラー時の処理
console.error(error.message);
});
エラーハンドリング
catch
ブロックを使用して、リジェクトされた Promise からエラー情報を取得できます。
async function myFunction(): Promise<void> {
try {
// 非同期処理
await somethingAsync();
} catch (error) {
// エラー処理
console.error(error.message);
}
}
myFunction()
.catch((error) => {
// エラー時の処理
console.error(error.message);
});
型注釈
async
関数の戻り値の型は、Promise 型にする必要があります。
async function myFunction(): Promise<string> {
// ...
}
その他
async/await
構文は、非同期処理を記述する簡潔で読みやすい方法を提供します。
async/await 構文で Promise をリジェクトする他の方法
return Promise.reject()
catch
ブロック内で return Promise.reject()
を使用して、エラー情報を渡して Promise をリジェクトすることができます。
async function myFunction(): Promise<string> {
try {
// 非同期処理
await somethingAsync();
} catch (error) {
// エラー処理
return Promise.reject(new Error('エラーメッセージ'));
}
}
myFunction()
.then((result) => {
// 成功時の処理
console.log(result);
})
.catch((error) => {
// エラー時の処理
console.error(error.message);
});
throw new Error()
async function myFunction(): Promise<string> {
try {
// 非同期処理
await somethingAsync();
} catch (error) {
// エラー処理
throw new Error('エラーメッセージ');
}
}
myFunction()
.then((result) => {
// 成功時の処理
console.log(result);
})
.catch((error) => {
// エラー時の処理
console.error(error.message);
});
finally
ブロックは、async
関数が正常に終了した場合でも、エラーが発生した場合でも必ず実行されます。
async function myFunction(): Promise<string> {
try {
// 非同期処理
await somethingAsync();
} catch (error) {
// エラー処理
} finally {
// 必ず実行される処理
return Promise.reject(new Error('エラーメッセージ'));
}
}
myFunction()
.then((result) => {
// 成功時の処理
console.log(result);
})
.catch((error) => {
// エラー時の処理
console.error(error.message);
});
独自のエラーオブジェクトを作成して、エラー情報を渡すことができます。
class MyError extends Error {
constructor(message: string) {
super(message);
}
}
async function myFunction(): Promise<string> {
try {
// 非同期処理
await somethingAsync();
} catch (error) {
// エラー処理
throw new MyError('エラーメッセージ');
}
}
myFunction()
.then((result) => {
// 成功時の処理
console.log(result);
})
.catch((error) => {
// エラー時の処理
if (error instanceof MyError) {
console.error(error.message);
} else {
throw error;
}
});
typescript asynchronous es6-promise