Isu Janji dan Sambungan
Dalam kod Node.js ini, janji dijangka menunggu untuk selesainya fungsi findUser, yang ia tidak. Isu ini berpunca daripada pelaksanaan tak segerak pertanyaan pangkalan data.
Fungsi Panggilan Balik Sambungan
Dalam findUser, sambungan ke pangkalan data diwujudkan menggunakan pool.getConnection. Fungsi ini mengambil fungsi panggil balik sebagai hujah, yang dipanggil apabila sambungan sudah sedia. Walau bagaimanapun, kod tersebut salah mengembalikan data dalam panggilan balik ini, menyebabkan tidak ditentukan dikembalikan sebelum pertanyaan selesai.
Untuk menangani perkara ini, fungsi findUser harus menghantar panggilan balik ke pool.getConnection yang menyelesaikan atau menolak janji, menunjukkan sama ada pertanyaan itu berjaya atau tidak.
Merangkai Janji
Penggunaan janji membolehkan kod dilaksanakan secara berurutan. Dalam kod yang disediakan, janji pertama hendaklah dirantai ke janji seterusnya menggunakan kemudian dan bukannya fungsi panggil balik, seperti yang ditunjukkan di bawah:
promise.then(function(rows) { return new Promise(function (resolve, reject) { loginC.doSomething(data); if (success) { resolve(data); } else { reject(reason); } }); }, function(reason) { console.log("error handler second"); });
Pengendalian Ralat
The sebab mesej "pengendali ralat kedua" dikeluarkan adalah kerana ralat berlaku apabila sambungan pangkalan data gagal. Pengendalian ralat dalam pendengar acara connection.on('error') tidak digunakan dengan betul. Ralat ini merebak ke fungsi findUser dan ditangkap oleh pengendali ralat kedua dalam rantaian.
Fungsi findUser harus menolak janji dengan mesej ralat, yang kemudiannya akan disebarkan kepada pengendali ralat dalam rantai janji .
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Merangkai Janji Dengan Betul dalam Node.js Apabila Bekerja dengan Pertanyaan Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!