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); });