Nodejs SQLプロセス制御

May 17, 2023 am 09:49 AM

Node.js がリレーショナル データベースを使用する場合、データベースからデータを取得して処理するなどの非同期操作が必要になることがよくあります。処理結果は次の操作に影響します。このとき、プロセス制御を使用する必要があります。 。

プロセス制御は、順次実行、並列実行、例外処理など、さまざまな状態のコードを制御するために使用されます。 Node.js では、一般的なプロセス コントロールにはコールバック関数、Promise、async/await、ジェネレーターが含まれます。 Node.js を使用してリレーショナル データベースに接続する場合、コールバック関数、Promise、async/await が特に重要です。3 つのプロセス コントロールの使用方法については、以下で詳しく紹介します。

1. コールバック関数

コールバック関数は、Node.js の古典的なプロセス制御メソッドです。コールバック関数とは、現在の関数を実行した後に実行できる関数で、その結果をパラメータとして渡すことで非同期制御を実現します。 Node.js の一部の関数ライブラリと一部のデータベース ドライバーは、非同期呼び出しを実装するためのコールバック関数を提供します。たとえば、Node.js のネイティブ ファイル モジュール fs では、コールバック関数を通じてファイルのコンテンツを読み取ることができます。

const fs = require('fs');
fs.readFile('./file.txt', 'utf8', (err, data) => {
  if (err) return console.error(err);
  console.log(data);
});
ログイン後にコピー

readFile 操作が完了すると、コールバック関数は次のようになります。が呼び出され、その結果がパラメータとしてコールバック関数に渡されます。通常、コールバック関数の最初のパラメータはエラー メッセージを表し、2 番目のパラメータは通常、操作結果を表します。

ただし、入れ子になった非同期操作が発生すると、コールバック関数の入れ子が非常に面倒になる可能性があります。現時点では、Promise を使用してコードを最適化できます。

2. Promise

Promise は、コールバック関数のネストを回避する方法です。 Promise は非同期操作の最終結果を表し、ステータスによって操作が成功したか失敗したかを知ることができます。 Promise は連鎖呼び出しをサポートしており、非常に便利な状況で例外を処理できるため、コールバック関数のネストを回避できます。

Node.js では、サードパーティの Promise ライブラリ bluebird を使用して Promise オブジェクトを管理できます。たとえば、Promise を使用してファイルの内容を読み取ることができます。

const Promise = require('bluebird');
const fs = Promise.promisifyAll(require('fs'));

fs.readFileAsync('./file.txt', 'utf8')
  .then(data => {
    console.log(data);
  })
  .catch(err => {
    console.error(err);
  });
ログイン後にコピー

bluebird を使用した後、promisifyAll メソッドを使用して、ネイティブ fs モジュールのメソッドを Promise オブジェクトに変換できます。 Promise のチェーン呼び出しメソッドが動作するので利用できます。

上記の例では、成功した非同期操作の結果を取得するには then メソッドを使用し、失敗した非同期操作の結果を取得するには catch メソッドを使用します。手術。

Promise を使用する場合、連続して接続する必要がある複数の非同期操作が発生した場合、チェーン コールを使用するとコードをより簡潔にできます。

fs.readFileAsync('./file.txt', 'utf8')
  .then(data => {
    console.log(data);
    return fs.writeFileAsync('./file-copy.txt', data);
  })
  .then(() => {
    console.log('文件写入成功');
  })
  .catch(err => {
    console.error(err);
  });
ログイン後にコピー

上記のコードでは、ファイルが読み取られます。まず、ファイルの内容を新しいファイルに書き込み、最後にファイル書き込み成功メッセージを出力します。

3. async/await

async/await は、ES2017 で導入された非同期操作構文です。プロセスをブロックすることなく、非同期コードを同期コードのように見せることができます。 async 関数が実行されると、自動的に Promise オブジェクトが返されます。 await キーワードは async 関数内で使用され、Promise オブジェクトが結果を返すのを待ちます。操作が成功すると、非同期操作の結果が返されます。それ以外の場合は、エラーがスローされます。

Node.js を使用してデータベースに接続する場合、多くの場合、データベースからデータを取得して処理するなど、非同期操作を実行する必要があります。以下は、MySQL モジュールに基づく例です。

const mysql = require('mysql');
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'test'
});

const query = async (sql) => {
  return new Promise((resolve, reject) => {
    connection.query(sql, (err, rows) => {
      if (err) reject(err);
      else resolve(rows);
    });
  });
};

(async () => {
  try {
    const users = await query('SELECT * FROM users WHERE age > 18');
    console.log(users);
  } catch (err) {
    console.error(err);
  }
})();
ログイン後にコピー

上記のコードでは、async/await を使用して、MySQL データベースから 18 歳以上のユーザーをクエリし、結果を出力します。 query 関数では、Promise を使用して MySQL クエリ操作をラップするため、await キーワードを使用して非同期操作を順番に実行できます。

概要

プロセス制御は Node.js の非常に重要な概念です。合理的なプロセス制御により、コードの可読性と保守性が向上します。 Node.js では、一般的なプロセス制御メソッドには、コールバック関数、Promise、async/await、ジェネレーターが含まれます。リレーショナル データベースを使用する場合、コールバック関数、Promise、および async/await が最も一般的に使用されるプロセス制御メソッドです。これらのメソッドを柔軟に使用して非同期操作を管理し、コードの可読性と保守性を向上させることができます。

以上がNodejs SQLプロセス制御の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

UseEffectとは何ですか?副作用を実行するためにどのように使用しますか? UseEffectとは何ですか?副作用を実行するためにどのように使用しますか? Mar 19, 2025 pm 03:58 PM

この記事では、functionコンポーネントでのデータフェッチやDOM操作などの副作用を管理するためのフックであるReactの使用Effectについて説明します。メモリリークなどの問題を防ぐための使用、一般的な副作用、およびクリーンアップについて説明します。

usecontextとは何ですか?コンポーネント間で状態を共有するためにどのように使用しますか? usecontextとは何ですか?コンポーネント間で状態を共有するためにどのように使用しますか? Mar 19, 2025 pm 03:59 PM

この記事では、ReactのUseContextを説明しています。これにより、小道具掘削を避けることで国家管理を簡素化します。再レンダーの削減により、集中状態やパフォーマンスの改善などの利点について説明します。

connect()を使用して、ReactコンポーネントをReduxストアにどのように接続しますか? connect()を使用して、ReactコンポーネントをReduxストアにどのように接続しますか? Mar 21, 2025 pm 06:23 PM

記事では、Connect()、MapStateToprops、MapDispatchToprops、およびパフォーマンスへの影響を説明するReduxストアに反応コンポーネントをReduxストアに接続します。

イベントハンドラーのデフォルトの動作をどのように防止しますか? イベントハンドラーのデフォルトの動作をどのように防止しますか? Mar 19, 2025 pm 04:10 PM

記事では、PreventDefault()メソッドを使用して、イベントハンドラーのデフォルト動作の防止、ユーザーエクスペリエンスの強化などの利点、およびアクセシビリティの懸念などの潜在的な問題について説明します。

制御されたコンポーネントと制御されていないコンポーネントの利点と短所は何ですか? 制御されたコンポーネントと制御されていないコンポーネントの利点と短所は何ですか? Mar 19, 2025 pm 04:16 PM

この記事では、予測可能性、パフォーマンス、ユースケースなどの側面に焦点を当てた、Reactの制御されていないコンポーネントと制御されていないコンポーネントの利点と欠点について説明します。それらを選択する際に考慮することを要因についてアドバイスします。

< route>を使用してルートをどのように定義しますか 成分? < route>を使用してルートをどのように定義しますか 成分? Mar 21, 2025 am 11:47 AM

この記事では、< route>を使用して、Reactルーターのルートの定義について説明します。パス、コンポーネント、レンダリング、子供、正確、ネストされたルーティングなどの小道具をカバーするコンポーネント。

HTMLにおけるReactの役割:ユーザーエクスペリエンスの向上 HTMLにおけるReactの役割:ユーザーエクスペリエンスの向上 Apr 09, 2025 am 12:11 AM

ReactはJSXとHTMLを組み合わせてユーザーエクスペリエンスを向上させます。 1)JSXはHTMLを埋め込み、開発をより直感的にします。 2)仮想DOMメカニズムは、パフォーマンスを最適化し、DOM操作を削減します。 3)保守性を向上させるコンポーネントベースの管理UI。 4)国家管理とイベント処理は、インタラクティブ性を高めます。

Arrayおよびオブジェクトの変更に関するVUE 2の反応性システムの制限は何ですか? Arrayおよびオブジェクトの変更に関するVUE 2の反応性システムの制限は何ですか? Mar 25, 2025 pm 02:07 PM

VUE 2の反応性システムは、直接配列インデックス設定、長さの変更、およびオブジェクトプロパティの追加/削除と闘っています。開発者は、Vueの突然変異法とVue.set()を使用して、反応性を確保することができます。

See all articles