Rumah hujung hadapan web tutorial js Amalan pengaturcaraan tak segerak when.js di bawah node.js_node.js

Amalan pengaturcaraan tak segerak when.js di bawah node.js_node.js

May 16, 2016 pm 04:29 PM
node.js Pengaturcaraan tak segerak

Anggap senario perniagaan:

Dapatkan rss melalui alamat rss dan simpan dalam fail, dan alamat rss disimpan dalam fail.

Untuk menyelesaikan perniagaan senario ini, anda perlu menyelesaikan 3 tugasan:

1. Baca alamat rss daripada fail.

2. Dapatkan rss.

3.

Akhir sekali integrasikan ketiga-tiga tugasan ini.

Penyediaan:

Fail yang menyimpan alamat rss, address.txt.

http://programmer.csdn.net/rss_programmer.html

Tugasan 1:

Baca kandungan fail alamat rss dan kembalikannya melalui panggilan balik.

Salin kod Kod adalah seperti berikut:

var getRssAddress = fungsi(laluan, panggil balik) {
fs.readFile(path, {encoding: 'utf8'}, function (err, data) {
panggil balik(err, data);
});
}

Misi 2:

Dapatkan rss melalui alamat rss dan kembalikan ralat atau data melalui panggilan balik.

Salin kod Kod adalah seperti berikut:

var getRss = function(url, panggil balik) {
var data = '';
http.get(url, function(res) {
res.on('data', function(crunk) {
data = chrunk;
});
res.on('end', function() {
panggilan balik(null, data);
});
}).on('error', function(err) {
​ panggil balik(err, null);
});
}

Misi 3:

Simpan RSS dalam fail dan kembalikan ralat melalui panggilan balik.

Salin kod Kod adalah seperti berikut:

var saveRss = fungsi(data, panggil balik) {
fs.writeFile('rss.txt', data, 'utf8', function(err) {
​ panggil balik(err);
});
}

Integrasi:

Salin kod Kod adalah seperti berikut:

getRssAddress('address.txt', fungsi(err, data) {
jika(err) {
console.log(err);
Kembali;
}
getRss(data, fungsi(err, data) {
Jika(err) {
console.log(err);
Kembali;
}
SaveRss(data, fungsi(err) {
If(err) console.log(err);
});
});
});

Kod di atas adalah pemprosesan tak segerak sepenuhnya, menggunakan panggilan balik yang paling biasa untuk mengendalikan pengembalian logik tak segerak Kelebihannya ialah kaedah penulisan standard yang boleh diterima dengan mudah oleh semua orang; pengendalian pengecualian adalah menyusahkan, dan kod itu tidak intuitif, terutamanya Apabila berurusan dengan logik perniagaan yang kompleks dan pelbagai tugas pemprosesan, lapisan panggilan balik boleh membuatkan mata orang terpesona, menjadikan kod sukar untuk dikekalkan.

when.js, salah satu pelaksanaan spesifikasi Promise/A, ditujukan kepada domain masalah ini.

Mari kita lihat kod yang diubah.

Misi 1:

Salin kod Kod adalah seperti berikut:

var getRssAddress = fungsi(laluan) {
var tertunda = when.defer();
fs.readFile(path, {encoding: 'utf8'}, function (err, data) {
Jika (err) ditangguhkan.reject(err);
        deferred.resolve(data);
});

pulangan tertunda.janji;
}



Misi 2:

Salin kod Kod adalah seperti berikut:

var getRss = function(url) {
  var tertunda = when.defer();
    var data = '';
    http.get(url, function(res) {
      res.on('data', function(crunk) {
        data = chrunk;
      });
      res.on('end', function() {
        deferred.resolve(data);
      });
    }).on('error', function(err) {
      deferred.reject(err);
    });

    pemulangan tertunda.janji;
}

任务3:

复制代码 代码如下:

var saveRss = fungsi(data) {
  var tertunda = when.defer();
  fs.writeFile('rss.txt', data, 'utf8', function(err) {
    if(err) deferred.reject(err);
    deferred.resolve();
  });

  pemulangan tertunda.janji;
}


 

整合:

复制代码 代码如下:

getRssAddress('address.txt')
  .then(getRss)
  .then(saveRss)
  .catch(function(err) {
    console.log(err);
  });

解释:

promise/A规范定义的“Deferred/Promise”模型就是“发布/订阅者”模型,通过Deferred对象发布事件件,有事件,模型,通过Tertunda ,或者是失败reject事件;通过Promise对象进行对应完成或失败的订阅。

在Promises/A规范中,每个任务都有三种状态:默认(pending)、完成(ditepati)、失败(ditolak)>。2.默认状态还可以单向转移到失败状态,这个过程叫menolak,对应的方法是(ditangguh).

3.默认状态时,还可以通过ditunda.notify(kemas kini)来宣告任务执行信息,如执行进度;>4.状态的转移是一次性的,一旦任务由初始的pending转为其他状态,就会进入到个个下们中。

按照上面的代码。

通过when.defer定义一个deferred对象。

var tertunda = when.defer();

异步数据获取成功后,发布一个完成事件。

tertunda.menyelesaikan(data);

异步数据获取失败后,发布一个失败事件。


tertunda.tolak(err);

并且返回Promise对象作为订阅使用。


pulangan tertunda.janji;

订阅是通过Promise对象的then方法进行完成/失败/通知的订阅。


getRssAddress('address.txt')

  .then(getRss)

kemudian有三个参数,分别是diDipenuhi、padaDitolak、sedang berlangsung

janji.kemudian(padaDitepati, padaDitolak, onProgress)

上一个任务被resolve(data),diFulfilled函数就会被触发,data作为它的参数.

上一个任务被menolak(sebab),那么ditolak就会被触发,收到alasan。

任何时候,diFulfilled和onRejected都只有其一可以被触发,并且只触发一次。

对于处理异常,when.js也提供了极其方便的方法,then能传递错误,多个任务串,多个任务串,行们只在最后一个then定义onDitolak。也可以在最后一个then的后面调用tangkap函数捕获任何一个任务的异常。

如此写法简单明了。

复制代码

代码如下: getRssAddress('address.txt')   .then(getRss)   .then(saveRss)
  .catch(function(err) {
    console.log(err);
  });



Janji给异步编程带来了巨大的方便,可以让我们专注于单个任务的实现而金实现而间以上代码仅仅是基本使用,when.js提供的功能远远不止本文提到的的这些,具体参照官方API。

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan pengaturcaraan tak segerak dengan fungsi C++? Bagaimana untuk melaksanakan pengaturcaraan tak segerak dengan fungsi C++? Apr 27, 2024 pm 09:09 PM

Ringkasan: Pengaturcaraan tak segerak dalam C++ membenarkan berbilang tugas tanpa menunggu operasi yang memakan masa. Gunakan penunjuk fungsi untuk mencipta penunjuk kepada fungsi. Fungsi panggil balik dipanggil apabila operasi tak segerak selesai. Perpustakaan seperti boost::asio menyediakan sokongan pengaturcaraan tak segerak. Kes praktikal menunjukkan cara menggunakan penunjuk fungsi dan boost::asio untuk melaksanakan permintaan rangkaian tak segerak.

Cara menggunakan ReactPHP untuk pengaturcaraan tak segerak dalam PHP Cara menggunakan ReactPHP untuk pengaturcaraan tak segerak dalam PHP Jun 27, 2023 am 09:14 AM

Apabila aplikasi web menjadi lebih kompleks, pengaturcara terpaksa menggunakan pengaturcaraan tak segerak untuk mengendalikan sejumlah besar permintaan dan operasi I/O. PHP: HypertextPreprocessor tidak terkecuali. Untuk memenuhi keperluan ini, ReactPHP telah menjadi salah satu rangka kerja pengaturcaraan tak segerak yang paling popular untuk PHP. Dalam artikel ini, kita akan membincangkan cara melakukan pengaturcaraan tak segerak dalam PHP menggunakan ReactPHP. 1. Pengenalan kepada ReactPHP ReactPHP ialah pengaturcaraan berasaskan peristiwa

Pengaturcaraan Asynchronous Fungsi JavaScript: Petua Penting untuk Mengendalikan Tugas Kompleks Pengaturcaraan Asynchronous Fungsi JavaScript: Petua Penting untuk Mengendalikan Tugas Kompleks Nov 18, 2023 am 10:06 AM

Fungsi JavaScript Pengaturcaraan Asynchronous: Kemahiran Penting untuk Mengendalikan Tugasan Kompleks Pengenalan: Dalam pembangunan front-end moden, pengendalian tugas yang kompleks telah menjadi bahagian yang amat diperlukan. Kemahiran pengaturcaraan tak segerak fungsi JavaScript adalah kunci untuk menyelesaikan tugas yang kompleks ini. Artikel ini akan memperkenalkan konsep asas dan kaedah praktikal biasa bagi pengaturcaraan tak segerak fungsi JavaScript, dan menyediakan contoh kod khusus untuk membantu pembaca memahami dan menggunakan teknik ini dengan lebih baik. 1. Konsep asas pengaturcaraan tak segerak Dalam pengaturcaraan segerak tradisional, kodnya ialah

Bagaimana untuk melaksanakan pengendalian mesej tak segerak dalam PHP Bagaimana untuk melaksanakan pengendalian mesej tak segerak dalam PHP Jul 10, 2023 am 08:19 AM

Cara melaksanakan pemprosesan mesej tak segerak dalam PHP Pengenalan: Dalam aplikasi web moden, pemprosesan mesej tak segerak menjadi semakin penting. Pemprosesan mesej tak segerak boleh meningkatkan prestasi dan kebolehskalaan sistem dan meningkatkan pengalaman pengguna. Sebagai bahasa pengaturcaraan sisi pelayan yang biasa digunakan, PHP juga boleh melaksanakan pemprosesan mesej tak segerak melalui beberapa teknologi. Dalam artikel ini, kami akan memperkenalkan beberapa kaedah untuk melaksanakan pemprosesan mesej tak segerak dalam PHP dan memberikan contoh kod. Menggunakan Baris Giliran Mesej Baris Gilir Mesej ialah cara menyahganding komponen sistem, membenarkan komponen berbeza

Pemahaman mendalam tentang ciri baharu PHP8: Bagaimana untuk menggunakan pengaturcaraan dan kod tak segerak dengan cekap? Pemahaman mendalam tentang ciri baharu PHP8: Bagaimana untuk menggunakan pengaturcaraan dan kod tak segerak dengan cekap? Sep 11, 2023 pm 01:52 PM

Pemahaman mendalam tentang ciri baharu PHP8: Bagaimana untuk menggunakan pengaturcaraan dan kod tak segerak dengan cekap? PHP8 ialah versi utama terkini bahasa pengaturcaraan PHP, membawakan banyak ciri baharu dan penambahbaikan yang menarik. Salah satu ciri yang paling menonjol ialah sokongan untuk pengaturcaraan tak segerak. Pengaturcaraan tak segerak membolehkan kami meningkatkan prestasi dan responsif apabila menangani tugas serentak. Artikel ini akan melihat secara mendalam ciri pengaturcaraan tak segerak PHP8 dan menerangkan cara menggunakannya dengan cekap. Pertama, mari kita fahami apa itu pengaturcaraan tak segerak. Dalam model pengaturcaraan segerak tradisional, kod mengikut urutan linear

Masalah dan penyelesaian biasa dalam pengaturcaraan tak segerak dalam rangka kerja Java Masalah dan penyelesaian biasa dalam pengaturcaraan tak segerak dalam rangka kerja Java Jun 04, 2024 pm 05:09 PM

3 masalah dan penyelesaian biasa dalam pengaturcaraan tak segerak dalam rangka kerja Java: Callback Hell: Gunakan Promise atau CompletableFuture untuk mengurus panggilan balik dalam gaya yang lebih intuitif. Perbalahan sumber: Gunakan primitif penyegerakan (seperti kunci) untuk melindungi sumber yang dikongsi dan pertimbangkan untuk menggunakan koleksi selamat benang (seperti ConcurrentHashMap). Pengecualian tidak terkendali: Mengendalikan pengecualian dalam tugas secara eksplisit dan menggunakan rangka kerja pengendalian pengecualian (seperti CompletableFuture.exceptionally()) untuk mengendalikan pengecualian.

Bagaimanakah rangka kerja golang mengendalikan konkurensi dan pengaturcaraan tak segerak? Bagaimanakah rangka kerja golang mengendalikan konkurensi dan pengaturcaraan tak segerak? Jun 02, 2024 pm 07:49 PM

Rangka kerja Go menggunakan ciri serentak dan tak segerak Go untuk menyediakan mekanisme untuk mengendalikan tugas serentak dan tak segerak dengan cekap: 1. Keselarasan dicapai melalui Goroutine, membolehkan berbilang tugasan dilaksanakan pada masa yang sama 2. Pengaturcaraan tak segerak dilaksanakan melalui saluran, yang boleh dilaksanakan tanpa menyekat utas utama Tugas 3. Sesuai untuk senario praktikal, seperti pemprosesan serentak permintaan HTTP, pemerolehan tak segerak data pangkalan data, dsb.

Era AI JS sudah tiba! Era AI JS sudah tiba! Apr 08, 2024 am 09:10 AM

Pengenalan kepada JS-Torch JS-Torch ialah perpustakaan JavaScript pembelajaran mendalam yang sintaksnya hampir sama dengan PyTorch. Ia mengandungi objek tensor berfungsi sepenuhnya (boleh digunakan dengan kecerunan yang dijejaki), lapisan dan fungsi pembelajaran mendalam, dan enjin pembezaan automatik. JS-Torch sesuai untuk penyelidikan pembelajaran mendalam dalam JavaScript dan menyediakan banyak alatan dan fungsi yang mudah untuk mempercepatkan pembangunan pembelajaran mendalam. Image PyTorch ialah rangka kerja pembelajaran mendalam sumber terbuka yang dibangunkan dan diselenggara oleh pasukan penyelidik Meta. Ia menyediakan set alat dan perpustakaan yang kaya untuk membina dan melatih model rangkaian saraf. PyTorch direka bentuk untuk menjadi ringkas, fleksibel dan mudah digunakan, dan ciri graf pengiraan dinamiknya menjadikan

See all articles