Node.jsでの約束

Mar 24 2023
Node.js は、開発者がスケーラブルで効率的なアプリケーションを構築できるようにする人気のランタイム環境です。

Node.js は、開発者がスケーラブルで効率的なアプリケーションを構築できるようにする人気のランタイム環境です。Node.js の中核的な機能の 1 つは、高パフォーマンスのアプリケーションを構築するために不可欠な非同期コードを処理する機能です。非同期コードは、特に複雑な操作や長時間実行されるタスクを扱う場合、管理が難しい場合があります。ここで Promise が登場し、Node.js で非同期操作を処理するシンプルかつ効果的な方法を提供します。

この記事では、Node.js の Promise の概念と、それが最新のアプリケーションの構築に重要である理由について説明します。

約束とは何ですか?

簡単に言えば、Promise はまだ利用できない可能性のある値を表すオブジェクトです。Promise は、ネットワーク要求の実行やディスクからのファイルの読み取りなど、JavaScript での非同期操作を処理するために使用されます。

Promise には 3 つの状態があります。

  • Pending: Promise の初期状態。値がまだ利用できないことを示します。
  • Fulfilled: 操作が成功し、値が使用可能になったときの Promise の状態。
  • 拒否: 操作が失敗し、エラーが発生したときの Promise の状態。

Node.js で Promise を作成する

Node.js で Promise を作成するのは簡単です。Promise コンストラクターを使用して新しい Promise を作成し、非同期操作を実行する関数を渡します。この関数は、操作が成功したかどうかを示す 2 つの引数、resolve と拒否を受け取ります。

1 秒の遅延後に解決される Promise を作成する例を次に示します。

const myPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('Operation successful!');
  }, 1000);
});

Promise 結果の処理

Promise が作成されたら、then メソッドを使用して結果を処理できます。then メソッドは 2 つの関数を引数として受け取ります。1 つは成功した操作を処理する関数で、もう 1 つはエラーを処理する関数です。

上記で作成した Promise を使用して結果をコンソールに記録する例を次に示します。

myPromise.then((result) => {
  console.log(result);
}).catch((error) => {
  console.error(error);
});

約束を連鎖させる

Promise の強力な機能の 1 つは、Promise をチェーンできることです。これにより、コールバックをネストすることなく、一連の非同期操作をシーケンス内で実行できるようになります。

2 つの Promise を連結する例を次に示します。

const getUser = (id) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const user = { id, name: 'John Doe' };
      resolve(user);
    }, 1000);
  });
};

const getPosts = (user) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const posts = [{ id: 1, title: 'Post 1' }, { id: 2, title: 'Post 2' }];
      resolve({ user, posts });
    }, 1000);
  });
};

getUser(1)
  .then(getPosts)
  .then((result) => {
    console.log(result);
  })
  .catch((error) => {
    console.error(error);
  });

#nodejs #javascript #ブロックチェーン #プロミス #フルスタック開発者