Rumah >pangkalan data >tutorial mysql >Mengapa Janji Saya Selesai Lebih Awal dalam Node.js dengan Express dan Promises?

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

DDD
DDDasal
2024-11-17 15:32:02933semak imbas

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);
            }
        });
      });
    });
}

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);
        });

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!

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