今日は、ChatGPT の助けを借りて Node.js の学習を続け、非同期プログラミングに焦点を当てました。これは Node.js の最も重要な概念の 1 つであり、それをマスターし始めることに興奮しています。
理論
Node.js では、ノンブロッキングのイベント駆動型アーキテクチャにより、非同期プログラミングが重要です。これは、ファイル読み取り、データベース クエリ、ネットワーク リクエストなどの操作が、結果の待機中に他のコードの実行をブロックしないことを意味します。
非同期操作を処理する 3 つの主な方法を検討しました:
Callbacks: 他の関数に引数として渡される関数。非同期操作が完了すると実行されます。
const fs = require('fs'); fs.readFile('example.txt', 'utf8', (err, data) => { if (err) { console.error(err); return; } console.log(data); });
Promises: 非同期操作の最終的な完了 (または失敗) とその結果の値を表すオブジェクト。 Promise を使用するとチェーンが可能になり、ネストされたコールバックと比較してコードが読みやすくなります。
const fs = require('fs').promises; fs.readFile('example.txt', 'utf8') .then(data => { console.log(data); }) .catch(err => { console.error(err); });
Async/Await: Promise の上に構築された糖衣構文で、同期的な方法で非同期コードを記述できます。
const fs = require('fs').promises; async function readFile() { try { const data = await fs.readFile('example.txt', 'utf8'); console.log(data); } catch (err) { console.error(err); } } readFile();
実践的なタスク
今日はコールバックベースの関数をプロミスベースの関数に変換する練習をしました。
コールバックを含む元のコード:
const fs = require('fs'); function readFileCallback(path, callback) { fs.readFile(path, 'utf8', (err, data) => { if (err) { callback(err); return; } callback(null, data); }); } readFileCallback('example.txt', (err, data) => { if (err) { console.error(err); return; } console.log(data); });
Promise への変換:
const fs = require('fs').promises; function readFilePromise(path) { return fs.readFile(path, 'utf8'); } readFilePromise('example.txt') .then(data => { console.log(data); }) .catch(err => { console.error(err); });
独立したタスク
また、async/await を使用して、ファイルの内容を読み取り、コンソールに記録する非同期関数も作成しました。エラーが発生した場合 (ファイルが見つからないなど)、エラーをキャッチしてログに記録する必要があります。
const fs = require('fs').promises; async function readFileAsync(path) { try { const data = await fs.readFile(path, 'utf8'); console.log(data); } catch (err) { console.error(err); } } readFileAsync('example.txt');
リソース
ChatGPT によって作成されたすべてのレッスンは、https://king-tri-ton.github.io/learn-nodejs
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3