Mengapa Janji Saya dalam Node.js Express Tidak Menunggu Pertanyaan Pangkalan Data Selesai?

DDD
Lepaskan: 2024-11-19 02:22:02
asal
890 orang telah melayarinya

Why Is My Promise in Node.js Express Not Waiting for the Database Query to Complete?

Janji Tidak Berkelakuan Seperti Yang Diharapkan dalam Node.js Express

Memahami Isu

Dalam kod yang anda berikan, janji itu tidak menjeda pelaksanaan kod untuk menunggu fungsi findUser selesai. Ini kerana fungsi findUser tidak mengembalikan janji. Sebaliknya, ia kembali tidak ditentukan serta-merta, menyebabkan kod diteruskan tanpa menunggu pertanyaan pangkalan data selesai.

Membetulkan Kod

Untuk membetulkannya, fungsi findUser harus mengembalikan janji yang diselesaikan dengan baris yang diambil daripada pangkalan data:

me.findUser = function(params, res) {
    var username = params.username;

    return new Promise(function (res, rej) {
        pool.getConnection(function (err, connection) {
            if (err) {
                rej('db error');
            } else {
                connection.query('SELECT Id, Name, Password FROM Users WHERE Users.Name = ?', [username], function (err, rows) {
                    connection.release();
                    if (!err) {
                        res(rows);
                    } else {
                        rej('other error');
                    }
                });
            }
        });
    });
}
Salin selepas log masuk

Dengan perubahan ini, janji akan menjeda pelaksanaan kod dan tunggu pertanyaan selesai sebelum meneruskan dengan pernyataan if/else.

Menjelaskan Pengendali Ralat

Pengendali ralat pengendali ralat kedua dikeluarkan kerana fungsi findUser menolak janji dengan ralat mesej. Ini menyebabkan pengendali ketika itu dilangkau dan pengendali tangkapan (dengan mesej 'pengendali ralat kedua') dipanggil sebaliknya.

Untuk menyelesaikan masalah ini, pastikan fungsi findUser mengendalikan ralat dan menyelesaikan dengan yang diingini data dengan betul. Selain itu, anda boleh menambah pengendalian ralat ke peringkat seterusnya rantai janji untuk mengendalikan sebarang ralat seterusnya.

Atas ialah kandungan terperinci Mengapa Janji Saya dalam Node.js Express Tidak Menunggu Pertanyaan Pangkalan Data Selesai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan