Memahami Sifat Asynchronous fs.readFile
Apabila berurusan dengan operasi sistem fail dalam Node.js, adalah penting untuk memahami sifat tak segerak daripada fs.readFile. Tidak seperti fungsi segerak, fungsi tak segerak dilaksanakan pada utas yang berasingan, membenarkan utas utama diteruskan tanpa menunggu operasi selesai.
Ini boleh membawa kepada hasil yang tidak dijangka, seperti yang ditunjukkan dalam coretan kod berikut:
<code class="js">var content; fs.readFile('./Index.html', function read(err, data) { if (err) { throw err; } content = data; }); console.log(content); // Logs undefined, why?</code>
Isu timbul kerana console.log dilaksanakan sebelum fungsi panggil balik tak segerak selesai dibaca. Akibatnya, kandungan masih tidak ditentukan pada masa pengelogan.
Menangani Ketaksegerakan
Untuk menyelesaikan isu ini, adalah penting untuk mengambil kira sifat tak segerak bagi fs .readFile. Terdapat beberapa pendekatan untuk mengendalikan perkara ini:
Contoh Kod:
Menggunakan panggilan balik bersarang:
<code class="js">fs.readFile('./Index.html', function read(err, data) { if (err) { throw err; } console.log(data); });</code>
Menggunakan fungsi berasingan:
<code class="js">function readAndPrintFile() { fs.readFile('./Index.html', function read(err, data) { if (err) { throw err; } console.log(data); }); } readAndPrintFile();</code>
Menggunakan janji (ES2017):
<code class="js">const fsPromises = require('fs/promises'); fsPromises.readFile('./Index.html') .then((data) => console.log(data)) .catch((err) => console.error(err));</code>
Atas ialah kandungan terperinci Mengapa Adakah `console.log(content)` Log `undefined` Apabila Menggunakan `fs.readFile` dalam Node.js?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!