Rumah  >  Artikel  >  hujung hadapan web  >  kawalan proses sql nodejs

kawalan proses sql nodejs

WBOY
WBOYasal
2023-05-17 09:49:06475semak imbas

Apabila Node.js menggunakan pangkalan data hubungan, ia selalunya perlu melakukan operasi tak segerak, seperti mendapatkan data daripada pangkalan data dan memprosesnya Hasil pemprosesan akan mempengaruhi operasi seterusnya .

Kawalan aliran digunakan untuk mengawal kod dalam keadaan berbeza, seperti pelaksanaan berurutan, pelaksanaan selari, pengendalian pengecualian, dsb. Dalam Node.js, kawalan proses biasa termasuk fungsi panggil balik, Janji, async/menunggu dan penjana. Apabila menggunakan Node.js untuk menyambung ke pangkalan data hubungan, fungsi panggil balik, Janji dan async/menunggu amat penting Penggunaan tiga kawalan proses akan diperkenalkan secara terperinci di bawah.

1. Fungsi panggil balik

Fungsi panggil balik ialah kaedah kawalan proses klasik dalam Node.js. Fungsi panggil balik ialah fungsi yang boleh dilaksanakan selepas fungsi semasa dilaksanakan, dan hasilnya diluluskan sebagai parameternya untuk mencapai kawalan tak segerak. Sesetengah pustaka fungsi dalam Node.js dan beberapa pemacu pangkalan data menyediakan fungsi panggil balik untuk melaksanakan panggilan tak segerak. Contohnya, dalam modul fail asli fs dalam Node.js, kandungan fail boleh dibaca melalui fungsi panggil balik:

const fs = require('fs');
fs.readFile('./file.txt', 'utf8', (err, data) => {
  if (err) return console.error(err);
  console.log(data);
});

Apabila operasi readFile selesai, fungsi panggil balik akan dipanggil dan hasilnya akan diluluskan sebagai parameter kepada fungsi panggil balik. Parameter pertama dalam fungsi panggil balik biasanya mewakili mesej ralat, dan parameter kedua biasanya mewakili hasil operasi.

Walau bagaimanapun, apabila menghadapi operasi tak segerak bersarang, sarang fungsi panggil balik boleh menjadi sangat menyusahkan. Pada masa ini, Promise boleh digunakan untuk mengoptimumkan kod.

2. Janji

Janji ialah cara untuk mengelakkan fungsi panggil balik bersarang. Janji mewakili hasil akhir operasi tak segerak Anda boleh mengetahui sama ada operasi itu berjaya atau gagal melalui statusnya. Promise menyokong panggilan berantai, yang boleh mengendalikan pengecualian dalam situasi yang sangat mudah, dengan itu mengelakkan sarang fungsi panggil balik.

Dalam Node.js, anda boleh menggunakan bluebird pustaka Promise pihak ketiga untuk mengurus objek Promise. Sebagai contoh, kita boleh menggunakan Promise untuk membaca kandungan fail:

const Promise = require('bluebird');
const fs = Promise.promisifyAll(require('fs'));

fs.readFileAsync('./file.txt', 'utf8')
  .then(data => {
    console.log(data);
  })
  .catch(err => {
    console.error(err);
  });

Selepas menggunakan bluebird, kita boleh menggunakan kaedah promisifyAll untuk menukar kaedah dalam modul fs asli menjadi objek Promise, supaya kita boleh menggunakan Janji rantaian Panggil kaedah untuk beroperasi.

Dalam contoh di atas, gunakan kaedah then untuk mendapatkan hasil operasi tak segerak yang berjaya dan gunakan kaedah catch untuk mendapatkan hasil operasi tak segerak yang gagal.

Apabila menggunakan Promise, jika anda menghadapi berbilang operasi tak segerak yang perlu disambungkan secara bersiri, menggunakan panggilan berantai boleh menjadikan kod lebih ringkas:

fs.readFileAsync('./file.txt', 'utf8')
  .then(data => {
    console.log(data);
    return fs.writeFileAsync('./file-copy.txt', data);
  })
  .then(() => {
    console.log('文件写入成功');
  })
  .catch(err => {
    console.error(err);
  });

Dalam kod di atas, fail dibaca pertama, Kemudian tulis kandungan fail ke dalam fail baharu, dan akhirnya keluarkan mesej kejayaan menulis fail.

3. async/wait

async/wait ialah sintaks operasi tak segerak yang diperkenalkan pada ES2017. Ia boleh menjadikan kod asynchronous kelihatan seperti kod segerak tanpa menyekat proses. Apabila fungsi async dilaksanakan, ia akan mengembalikan objek Promise secara automatik Kata kunci await digunakan dalam fungsi async untuk menunggu objek Promise mengembalikan hasilnya. Jika operasi berjaya, hasil daripada operasi tak segerak akan dikembalikan, jika tidak ralat akan dilemparkan.

Apabila menggunakan Node.js untuk menyambung ke pangkalan data, kami selalunya perlu melakukan operasi tak segerak, seperti mendapatkan data daripada pangkalan data dan memprosesnya. Berikut ialah contoh berdasarkan modul MySQL:

const mysql = require('mysql');
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'test'
});

const query = async (sql) => {
  return new Promise((resolve, reject) => {
    connection.query(sql, (err, rows) => {
      if (err) reject(err);
      else resolve(rows);
    });
  });
};

(async () => {
  try {
    const users = await query('SELECT * FROM users WHERE age > 18');
    console.log(users);
  } catch (err) {
    console.error(err);
  }
})();

Dalam kod di atas, async/wait digunakan untuk menanyakan pengguna yang berumur lebih daripada 18 tahun daripada pangkalan data MySQL dan mengeluarkan hasilnya. Dalam fungsi query, Promise digunakan untuk membalut operasi pertanyaan MySQL, supaya kata kunci tunggu boleh digunakan untuk melaksanakan operasi tak segerak mengikut turutan.

Ringkasan

Kawalan proses ialah konsep yang sangat penting dalam Node.js Kawalan proses yang munasabah boleh meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Dalam Node.js, kaedah kawalan proses biasa termasuk fungsi panggil balik, Janji, async/menunggu dan penjana. Apabila menggunakan pangkalan data hubungan, fungsi panggil balik, Promise dan async/wait ialah kaedah kawalan proses yang paling biasa digunakan. Kami boleh menggunakan kaedah ini secara fleksibel untuk mengurus operasi tak segerak dan meningkatkan kebolehbacaan dan kebolehselenggaraan kod.

Atas ialah kandungan terperinci kawalan proses sql nodejs. 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