Menyegerakkan Pertanyaan MySQL dengan Async/Await dalam Node.js
Dalam Node.js, kata kunci async/wait membenarkan kod tak segerak untuk ditulis secara serentak. Untuk operasi pangkalan data, seperti pertanyaan MySQL, ini amat berguna untuk memastikan semua keputusan diperoleh sebelum meneruskan.
Cabaran: Pertanyaan Asynchronous
Pertimbangkan kod berikut coretan, yang cuba mendapatkan berbilang hasil pangkalan data dan menambahkannya pada a rentetan:
var string1 = ''; var string2 = ''; var string3 = ''; var string4 = ''; DatabasePool.getConnection(function(err, connection) { connection.query(query,function (err, result) { if (err){}; string1 = result; }); connection.query(query,function (err, result) { if (err){}; string2 = result; }); connection.query(query,function (err, result) { if (err){}; string3 = result; }); connection.query(query,function (err, result) { if (err){}; string4 = result; }); //I need to append all these strings to appended_text but //all variables remain blank because below code runs first. var appended_text = string1 + string2 + string3 + string4; });
Dalam kod ini, setiap pertanyaan dilaksanakan secara tidak segerak, yang membawa kepada tingkah laku yang tidak ditentukan untuk pembolehubah appended_text. Untuk menyelesaikan isu ini, Node.js 8 memperkenalkan ciri yang berkuasa.
Penyelesaian: Promisification dengan Async/Await
Untuk menyegerakkan pertanyaan menggunakan async/wait, anda boleh memanfaatkan fungsi util.promisify() asli bersama-sama dengan modul mysql nod. Berikut ialah contoh:
const mysql = require('mysql'); const util = require('util'); const conn = mysql.createConnection({yourHOST/USER/PW/DB}); // node native promisify const query = util.promisify(conn.query).bind(conn); (async () => { try { // Execute your queries sequentially using await const rows1 = await query('select count(*) as count from file_managed'); const rows2 = await query('select count(*) as count from file_managed'); const rows3 = await query('select count(*) as count from file_managed'); const rows4 = await query('select count(*) as count from file_managed'); // Append the results to the appended_text variable var appended_text = rows1.count + rows2.count + rows3.count + rows4.count; console.log(appended_text); } finally { conn.end(); } })();
Dalam kod ini:
Menggunakan async/await dengan nod mysql memudahkan penyegerakan pertanyaan pangkalan data, membolehkan kod yang lebih mudah dibaca dan diselenggara.
Atas ialah kandungan terperinci Bagaimana untuk Menyegerakkan Pertanyaan MySQL dengan Async/Await dalam Node.js?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!