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