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

WBOY
Lepaskan: 2016-05-16 15:35:46
asal
1080 orang telah melayarinya

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);
};
Salin selepas log masuk

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;
}
}
Salin selepas log masuk

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);
});
Salin selepas log masuk

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);
});
Salin selepas log masuk

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){

});

Salin selepas log masuk

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');
  }
],
Salin selepas log masuk

2,

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

Label berkaitan:
sumber:php.cn
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