Mengapa Janji Saya Selesai Lebih Awal dalam Node.js dengan Express dan Promises?

DDD
Lepaskan: 2024-11-17 15:32:02
asal
870 orang telah melayarinya

Why Does My Promise Resolve Prematurely in Node.js with Express and Promises?

Node.js Express and Promises: Menangani Gelagat Yang Tidak Dapat Diramalkan

Punca Janji Yang Tidak Ditunggu

Dalam kod anda, janji yang dibuat untuk fungsi findUser dilaksanakan serta-merta, tetapi fungsi itu sendiri tidak segerak. Oleh itu, janji diselesaikan lebih awal sebelum findUser boleh mendapatkan semula data.

Melaksanakan Perlaksanaan Janji yang Betul

Ubah suai fungsi findUser anda untuk mengembalikan janji dan bukannya cuba mengembalikan nilai secara serentak. Berikut ialah contoh:

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

    return new Promise(function (resolve, reject) {

      pool.getConnection(function (err, connection) {
        if (err) {
          reject(err);
          return;
        }

        connection.query('select Id, Name, Password from Users ' +
            'where Users.Name = ?', [username], function (err, rows) {
            connection.release();
            if (err) {
                reject(err);
            } else {
                resolve(rows);
            }
        });
      });
    });
}
Salin selepas log masuk

Pengendalian Ralat

Mesej "pengendali ralat kedua" muncul kerana pengendali ralat dalam janji kedua ditolak apabila findUser menghadapi ralat. Untuk membetulkannya, ubah suai kod seperti berikut:

promise.then(function(data) {
            return new Promise(function (resolve, reject) {
                loginC.doSomething(data);

                if (success) {
                    console.log("Success 2");
                    resolve(data);
                } else {
                    console.log("Failed 2");
                    reject("Error in doSomething");
                }
            });
        }).catch(function (reason) {
            console.log("Error in findUser: " + reason);
        });
Salin selepas log masuk

Nota Tambahan

  • Pastikan anda mengendalikan ralat sambungan pangkalan data dalam panggilan balik sambungan.
  • Elakkan bergantung pada kaedah segerak untuk operasi tak segerak.
  • Janji digunakan untuk merantai operasi tak segerak dan hasil pengendalian dengan pasti.

Atas ialah kandungan terperinci Mengapa Janji Saya Selesai Lebih Awal dalam Node.js dengan Express dan Promises?. 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