徹底解説!TypeScriptでasync/await構文でPromiseをリジェクトする方法

2024-04-02

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


XMLHttpRequestとFetch APIを使いこなす

そこで登場したのが非同期通信です。非同期通信は、ユーザーがアクションを起こしてもページ全体を再読み込みすることなく、必要なデータのみをサーバーと通信で取得・更新する技術です。これにより、ユーザー操作のレスポンス向上やページ読み込み時間の短縮を実現できます。...


ネストされたクラス vs 名前空間 vs モジュール:どれを使うべき?

TypeScriptには、主に3種類のネストされたクラスがあります。公開ネストされたクラス: public キーワードを使用して宣言されます。外部クラスからも内部クラスからもアクセスできます。ネストされたクラスを使用する利点は次のとおりです。...


もっと楽に!Angular 2 で TypeScript を使って配列をフィルタリング

基本的な構文この例では、originalArray 配列内の 3 より大きい要素のみを含む filteredArray という新しい配列を作成します。複数条件でのフィルタリングfilter メソッドは、複数の条件を指定してフィルタリングすることもできます。...


JavaScriptとTypeScriptで発生する「Types have separate declarations of a private property」エラーを完全解決!

このエラーメッセージは、TypeScriptでprivate修飾子を介して宣言されたプロパティが、複数の型で異なる宣言を持っている場合に発生します。具体的には、以下の状況で発生します。継承関係にあるクラス間で、privateプロパティ名が重複している場合...


Node.js、MongoDB、TypeScriptにおける「current URL string parser is deprecated」警告の回避方法

Node. js の MongoDB ドライバーは、MongoDB 接続文字列を解析するために使用するツールを書き換えました。この変更は重大な変更であるため、新しい接続文字列パーサーはフラグの後ろに配置されています。このフラグを有効にするには、mongoose...


SQL SQL SQL SQL Amazon で見る



JavaScriptにおける明示的なPromise構築のアンチパターンと回避方法

Promiseは、非同期処理を扱うための強力なツールですが、明示的に構築する場合、いくつかのアンチパターンが存在します。これらのアンチパターンは、コードの読みやすさやメンテナンス性を低下させ、バグの原因にもなりえます。本記事では、JavaScriptにおける明示的なPromise構築の代表的なアンチパターンと、それらを回避する方法について解説します。


JavaScript/TypeScript開発者に必須!Promiseの拒否型でエラー処理をレベルアップ

JavaScriptおよびTypeScriptにおける非同期処理において、Promiseは重要な役割を果たします。非同期処理の結果を将来的な値として扱い、柔軟なコード構成とエラー処理を可能にします。本記事では、TypeScriptにおけるPromiseの拒否型に焦点を当て、詳細な解説を行います。