ホームページ >ウェブフロントエンド >フロントエンドQ&A >Nodejs SQLプロセス制御
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 サイトの他の関連記事を参照してください。