Ketahui lebih lanjut tentang pengaturcaraan tak segerak dalam Node.js dan kongsi empat penyelesaian

青灯夜游
Lepaskan: 2021-09-14 10:15:03
ke hadapan
2533 orang telah melayarinya

Jika ada I/O tak segerak, mesti ada pengaturcaraan tak segerak! Mari belajar pengaturcaraan tak segerak dalam Node.js hari ini!

Ketahui lebih lanjut tentang pengaturcaraan tak segerak dalam Node.js dan kongsi empat penyelesaian

Ikhtisar Pengaturcaraan Asynchronous

Bekas model single-threaded berada di bawah pengaruh I/O segerak kerana I perlahan /O memanggil , menyebabkan CPU dan I/O tidak dapat bertindih pada tahap aplikasi. Untuk menjaga tabiat membaca dan berfikir pengaturcara, I/O segerak telah popular selama bertahun-tahun. [Pembelajaran yang disyorkan: "tutorial nodejs"]

Ketahui lebih lanjut tentang pengaturcaraan tak segerak dalam Node.js dan kongsi empat penyelesaian

Tetapi terdapat masalah prestasi yang besar!

Node menggunakan JavaScript dan pustaka tak segerak dalamannya untuk terus meningkatkan tak segerak ke peringkat perniagaan. Ciri terbesar yang dibawa oleh Node ialah model I/O tidak menyekat dipacu peristiwa. I/O tanpa sekatan boleh menghalang CPU dan I/O daripada menunggu antara satu sama lain, membolehkan sumber digunakan dengan lebih baik.

Ketahui lebih lanjut tentang pengaturcaraan tak segerak dalam Node.js dan kongsi empat penyelesaian

Penyelesaian pengaturcaraan tak segerak

Tujuan: Baca kandungan fail yang sepadan dengan medan utama dalam package.json

Panggil Balik

Menggunakan fungsi panggil balik untuk operasi I/O tak segerak

const fs = require("fs");

fs.readFile("./package.json", { encoding: "utf-8" }, (err, data) => {
  if (err) throw err;
  const { main } = JSON.parse(data);
  fs.readFile(main, { encoding: "utf-8" }, (err, data) => {
    if (err) throw err;
    console.log(data);
  });
});
Salin selepas log masuk

Ketahui lebih lanjut tentang pengaturcaraan tak segerak dalam Node.js dan kongsi empat penyelesaian

Soalan: Bagaimana untuk menyelesaikan neraka panggilan balik?

Janji

Promise ialah mesin keadaan terhingga dengan empat keadaan, tiga daripadanya Menunggu dan Ditepati. Selesai), Ditolak (ditolak), dan terdapat juga status yang belum dimulakan

Untuk butiran, anda boleh lihat catatan blog saya sebelum ini Penerokaan awal Janji

Ketahui lebih lanjut tentang pengaturcaraan tak segerak dalam Node.js dan kongsi empat penyelesaian

Gunakan Promise untuk membaca kandungan fail yang sepadan dengan medan utama dalam package.json

const { readFile } = require("fs/promises");

readFile("./package.json", { encoding: "utf-8" })
  .then((res) => {
    return JSON.parse(res);
  })
  .then((data) => {
    return readFile(data.main, { encoding: "utf-8" });
  })
  .then((res) => {
    console.log(res);
  });
Salin selepas log masuk

Membandingkan penyelesaian sebelumnya menggunakan Panggilan Balik, dapat dilihat bahawa tiada panggilan balik bersarang. Melalui satu siri panggilan gaya rantai untuk mengendalikan operasi tak segerak.

Ketahui lebih lanjut tentang pengaturcaraan tak segerak dalam Node.js dan kongsi empat penyelesaian

Panggil Balik ke Janji

Bagaimana hendak menukar Panggilan Balik kepada borang Janji?

Anda boleh menggunakan fungsi alat Node sendiri util.promisify

untuk melaksanakannya sendiri:

function promisify(fn, receiver) {
  return (...args) => {
    return new Promise((resolve, reject) => {
      fn.apply(receiver, [
        ...args,
        (err, res) => {
          return err ? reject(err) : resolve(res);
        },
      ]);
    });
  };
}

const readFilePromise = promisify(fs.readFile, fs);
Salin selepas log masuk

tunggu

fungsi tunggu menggunakan try catch untuk menangkap pengecualian (perhatikan pemprosesan selari)

const { readFile } = require("fs/promises");

const start = async () => {
  const { main } = JSON.parse(
    await readFile("./package.json", { encoding: "utf-8" })
  );
  const data = await readFile(main, { encoding: "utf-8" });
  console.log(data);
};
start();
Salin selepas log masuk

Sintaks tunggu ditulis seperti pengaturcaraan segerak Operasi di sini ialah bersiri Operasi akan menunggu pelaksanaan baris demi baris.

Ketahui lebih lanjut tentang pengaturcaraan tak segerak dalam Node.js dan kongsi empat penyelesaian

Sekiranya beberapa tugasan boleh disejajarkan, tidak baik menulis dengan cara ini. Ini adalah, kita boleh menggunakan Promise.all untuk mengendalikan tugasan selari

Ada juga soalan kecil di sini saya bertanya kepada guru selepas kelas, dan ini adalah jawapan guru

Ketahui lebih lanjut tentang pengaturcaraan tak segerak dalam Node.js dan kongsi empat penyelesaian

[Q] Berkenaan pemprosesan tak segerak, apabila ia berkaitan dengan siri dan selari, saya mempunyai soalan mengenai pemprosesan selari. Jika senario selari memerlukan setiap tugas tak segerak mesti dilaksanakan tanpa mengira kejayaan atau kegagalan tugas lain, dan akhirnya mengendalikan ralat secara seragam, maka apabila menggunakan Promise.all untuk memproses berbilang tugas tak segerak, ralat pelaksanaan tugas pertama akan ditemui dipulangkan. Bagaimanakah kami boleh menyelesaikan semua tugas dan menangani ralat secara seragam? Jika permintaan gagal, ralat akan ditolak serta-merta, jadi kami tidak boleh menggunakan Promise.all untuk melaksanakan perkara ini. Promise mempunyai kaedah allSettled,

developer.mozilla.org/en-US/docs/…

Acara Mod terbitkan dan langgan, modul acara terbina dalam Node.js

seperti HTTP

pemantauan acara

server on('request')

const EventEmitter = require("events");

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();

myEmitter.on("event", () => {
  console.log("an event occurred!");
});
myEmitter.emit("event");

const http = require("http");

const server = http.createServer((req, res) => {
  res.end("hello!!! this is YK!!!");
});
server.on("request", (req, res) => {
  console.log(req.url);
});

server.listen(3000);
Salin selepas log masuk

Ketahui lebih lanjut tentang pengaturcaraan tak segerak dalam Node.js dan kongsi empat penyelesaian

Ketahui lebih lanjut tentang pengaturcaraan tak segerak dalam Node.js dan kongsi empat penyelesaian

Alamat asal: https://juejin.cn/post/7005509871000895524

Pengarang: YK bacteria

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Video Pengaturcaraan! !

Atas ialah kandungan terperinci Ketahui lebih lanjut tentang pengaturcaraan tak segerak dalam Node.js dan kongsi empat penyelesaian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:掘金--YK菌
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!