Pelaksanaan Asynchronous dalam Node.js: Menggunakan Async/Await dengan MySQL
Sebagai pendatang baharu Node.js, anda mungkin menghadapi kesukaran untuk menyesuaikan diri sintaks modennya, terutamanya apabila bekerja dengan operasi tak segerak. Mari kita terokai cara menggunakan kata kunci tak segerak/menunggu untuk mencapai hasil yang disegerakkan apabila menanyakan pangkalan data MySQL.
Dalam kod anda, anda ingin melaksanakan berbilang pertanyaan dan menggabungkan hasil menjadi satu rentetan. Walau bagaimanapun, memandangkan Node.js melaksanakan kod JavaScript dalam cara yang tidak menyekat, kod di bawah tidak menjamin bahawa pembolehubah string1 hingga string4 akan mengandungi hasil yang dijangkakan:
// Original Code var string1 = ''; var string2 = ''; var string3 = ''; var string4 = ''; DatabasePool.getConnection((err, connection) => { // Query 1 connection.query(query, (err, result) => { string1 = result; }); // Query 2 connection.query(query, (err, result) => { string2 = result; }); // Query 3 connection.query(query, (err, result) => { string3 = result; }); // Query 4 connection.query(query, (err, result) => { string4 = result; }); // Attempt to concatenate results var appended_text = string1 + string2 + string3 + string4; });
Penyelesaian dengan Async/ Tunggu
Untuk menyelesaikan isu ini dan membenarkan pelaksanaan segerak, Node.js 8 menyediakan fungsi util.promisify(). Begini cara untuk mengintegrasikannya dengan pustaka MySQL:
// Improved Code const mysql = require('mysql'); const util = require('util'); const conn = mysql.createConnection({ yourHOST, yourUSER, yourPW, yourDB }); // Promisify the query method const query = util.promisify(conn.query).bind(conn); (async () => { try { // Execute queries concurrently const [query1Result, query2Result, query3Result, query4Result] = await Promise.all([ query('select count(*) as count from file_managed'), query('another query'), query('another query'), query('another query'), ]); // Concatenate results const appended_text = query1Result[0].count + query2Result[0].count + query3Result[0].count + query4Result[0].count; } finally { // Close the connection conn.end(); } })();
Dalam kod yang disemak ini:
Pendekatan ini membolehkan anda menyegerakkan pertanyaan anda dengan lancar dan mendapatkan output yang diingini dalam cara yang boleh dipercayai cara, menjadikan async/menunggu alat yang berkuasa untuk mengendalikan operasi tak segerak dalam Node.js.
Atas ialah kandungan terperinci Bagaimanakah Async/Await Boleh Menyelesaikan Isu Konkurensi Apabila Menyoal MySQL dalam Node.js?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!