Ini akan sedikit tersebar, maafkan saya.
Pertama, dengan asumsi kode ini menggunakan API driver mysql dengan benar, inilah satu cara Anda dapat membungkusnya agar berfungsi dengan janji asli:
function getLastRecord(name)
{
return new Promise(function(resolve, reject) {
// The Promise constructor should catch any errors thrown on
// this tick. Alternately, try/catch and reject(err) on catch.
var connection = getMySQL_connection();
var query_str =
"SELECT name, " +
"FROM records " +
"WHERE (name = ?) " +
"LIMIT 1 ";
var query_var = [name];
connection.query(query_str, query_var, function (err, rows, fields) {
// Call reject on error states,
// call resolve with results
if (err) {
return reject(err);
}
resolve(rows);
});
});
}
getLastRecord('name_record').then(function(rows) {
// now you have your rows, you can see if there are <20 of them
}).catch((err) => setImmediate(() => { throw err; })); // Throw async to escape the promise chain
Jadi satu hal:Anda masih memiliki panggilan balik. Callback hanyalah fungsi yang Anda serahkan ke sesuatu untuk dipanggil di beberapa titik di masa depan dengan argumen yang dipilihnya. Jadi argumen fungsi di xs.map(fn)
, (err, result)
fungsi yang terlihat di node dan hasil janji dan penangan kesalahan semuanya adalah panggilan balik. Ini agak membingungkan oleh orang-orang yang merujuk pada jenis panggilan balik tertentu sebagai "panggilan balik", yang dari (err, result)
digunakan di inti simpul dalam apa yang disebut "gaya penerusan lanjutan", terkadang disebut "nodeback" oleh orang yang tidak terlalu menyukainya.
Untuk saat ini, setidaknya (async/await akan datang akhirnya), Anda cukup banyak terjebak dengan panggilan balik, terlepas dari apakah Anda mengadopsi janji atau tidak.
Juga, saya akan perhatikan bahwa janji tidak segera, jelas membantu di sini, karena Anda masih memiliki panggilan balik. Janji hanya benar-benar bersinar ketika Anda menggabungkannya dengan Promise.all
dan akumulator janji ala Array.prototype.reduce
. Tapi mereka melakukannya bersinar kadang-kadang, dan mereka adalah layak dipelajari.