Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah Saya Boleh Merangkai Janji Dengan Betul dalam Node.js Apabila Bekerja dengan Pertanyaan Pangkalan Data?

Bagaimanakah Saya Boleh Merangkai Janji Dengan Betul dalam Node.js Apabila Bekerja dengan Pertanyaan Pangkalan Data?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-14 09:30:02276semak imbas

How Can I Chain Promises Correctly in Node.js When Working with Database Queries?

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.

Merantai 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 merambat 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn