Seperti yang kita semua tahu, asynchronous ialah ciri dan kelebihan yang unik, tetapi pada masa yang sama, keperluan untuk penyegerakan dalam atur cara (contohnya, susunan pelaksanaan program kawalan ialah: func1 -> func2 -> func3) juga sangat biasa. Artikel ini merekodkan beberapa pemikiran saya mengenai isu ini.
Fungsi yang perlu dilaksanakan:
var func3 = function(req,res,callback){
setTimeout(function(){
console.log('in func3');
panggil balik(req,res,3);
},1000);
}
Ia boleh dilihat bahawa fungsi setTimeout digunakan dalam func1, func2 dan func3, dan masa pelaksanaan masing-masing ialah 13 saat, 5 saat dan 1 saat. Disebabkan oleh sifat tak segerak nodej, jika anda menggunakan kaedah panggilan fungsi biasa:
Kandungan keluaran:
Alasannya ialah kerana nodejs tidak segerak, func2 tidak akan menunggu func1 selesai melaksanakan, tetapi akan melaksanakannya dengan serta-merta (begitu juga dengan func3). Memandangkan func3 mempunyai masa berjalan paling singkat, ia tamat dahulu, diikuti dengan func2 dan func1 terakhir. Tetapi ini jelas bukan hasil yang kita mahukan. apa nak buat
Penyelesaian 1: panggil balik
func1(req,res,function(){
func2(req,res,function(){
func3(req,res,function(){
Process.exit(0);
})
});
});
Penyelesaian 2: Panggilan rekursif
var req = null;
var res = null;
var funcs = [func1,func2,func3];
var len = funcs.length;
executeFunc(funcs,0,len,req,res);
Penyelesaian 3: Panggil perpustakaan kelas
Dengan pembangunan nodejs, terdapat lebih banyak perpustakaan kelas yang sepadan. Langkah dan async adalah langkah yang baik.1. Panggilan Step agak menyegarkan:
async.series(
[
Fungsi(panggilan balik){
func1(req,res,callback);
},
Fungsi(panggilan balik){
func2(req,res,callback);
},
Fungsi(panggilan balik){
func3(req,res,callback);
}
]
);