Rumah  >  Artikel  >  hujung hadapan web  >  Perbincangan ringkas tentang pengaturcaraan tak segerak tak segerak dalam node.js_node.js

Perbincangan ringkas tentang pengaturcaraan tak segerak tak segerak dalam node.js_node.js

WBOY
WBOYasal
2016-05-16 15:35:461051semak imbas

1. Apakah itu pengaturcaraan tak segerak?

Pengaturcaraan tak segerak merujuk kepada apabila keputusan pelaksanaan tidak boleh diperolehi secara serentak disebabkan oleh I/O tak segerak dan faktor lain,
Gaya pengekodan untuk melaksanakan operasi seterusnya dalam fungsi panggil balik, yang biasa seperti fungsi setTimeout, permintaan ajax, dll.

Contoh:

for (var i = 1; i <= 3; i++) {
setTimeout(function(){
console.log(i);
}, 0);
};

Kebanyakan orang di sini akan berfikir bahawa output ialah 123, atau 333. Sebenarnya ia akan mengeluarkan 444

Inilah perkara yang kita bincangkan tentang pengaturcaraan tak segerak.

Takrifan fungsi lanjutan

Mengapa kita bercakap tentang fungsi peringkat tinggi di sini kerana fungsi peringkat tinggi adalah asas pengaturcaraan tak segerak.

Jadi apakah fungsi lanjutan?
Malah, fungsi lanjutan mengambil fungsi sebagai parameter atau sebagai nilai pulangan.

Contoh:

function test(v){
return function(){
return v;
}
}

Di atas adalah menggunakan fungsi sebagai nilai pulangan.

2. Kawalan proses

Fungsinya ialah:
siri
air terjun
selari
parallelLimit

perlaksanaan bersiri fungsi siri

Fungsinya adalah untuk melaksanakannya dalam urutan.

async.series({
  one: function(callback){
    callback(null, 1);
  },
  two: function(callback){
    callback(null, 2);
  }
},function(err, results) {
  console.log(results);
});

Output: {satu: 1, dua: 2}

Parameter pertama fungsi siri boleh menjadi tatasusunan atau objek JSON,
Jenis parameter yang berbeza mempengaruhi format data yang dikembalikan.

fungsi air terjun aliran air terjun

Fungsi air terjun dan siri mempunyai banyak persamaan, kedua-duanya dilaksanakan mengikut urutan.
Perbezaannya ialah nilai yang dijana oleh setiap fungsi dalam air terjun akan dihantar ke fungsi seterusnya, manakala siri tidak mempunyai fungsi ini Contohnya seperti berikut:

async.waterfall([
  function(callback){
    callback(null, 'one', 'two');
  },
  function(arg1, arg2, callback){
   // arg1 now equals 'one' and arg2 now equals 'two'
    callback(null, 'three');
  },
  function(arg1, callback){
    // arg1 now equals 'three'
    callback(null, 'done');
  }
], function (err, result) {
  // result now equals 'done'
  console.log(result);
});

Perlu diingatkan juga bahawa parameter tugasan air terjun hanya boleh daripada jenis tatasusunan.
Apabila ralat fungsi berlaku di tengah, ralatnya terus dihantar ke panggilan balik terakhir, hasilnya dibuang, dan fungsi berikutnya tidak lagi dilaksanakan.

selari(tugas, [panggil balik])

Fungsi selari melaksanakan berbilang fungsi secara selari Setiap fungsi dilaksanakan serta-merta tanpa menunggu fungsi lain dilaksanakan terlebih dahulu.
Data dalam tatasusunan yang dihantar ke panggilan balik terakhir adalah dalam susunan yang diisytiharkan dalam tugasan, dan bukannya susunan pelaksanaan selesai. Contoh adalah seperti berikut:

async.parallel([
  function(callback){
    callback(null, 'one');
  },
  function(callback){
    callback(null, 'two');
  }
],
function(err, results){

});

Parameter tugas boleh menjadi tatasusunan atau objek json, sama seperti fungsi siri,
Jenis parameter tugas yang berbeza akan menghasilkan format hasil yang dikembalikan yang berbeza.

parallelLimit(tugas, had, [panggilan balik])

Fungsi parallelLimit adalah serupa dengan selari, tetapi ia mempunyai had parameter tambahan.
Parameter had mengehadkan tugas kepada bilangan tugas serentak tertentu, dan bukannya serentak tanpa had Contoh adalah seperti berikut:

async.parallelLimit([
  function(callback){
    callback(null, 'one');
  },
  function(callback){
    callback(null, 'two');
  }
],

2,

function(err, results){
  console.log(results);
});

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