Rumah >hujung hadapan web >tutorial js >Melaksanakan konsep Golang defer ke dalam Javascript
Dalam Go, pernyataan tangguh menangguhkan pelaksanaan fungsi sehingga fungsi sekeliling kembali. Berikut ialah contoh mudah:
package main import "fmt" func main() { fmt.Println("start") defer fmt.Println("defer 1") defer fmt.Println("defer 2") fmt.Println("end") }
Dalam contoh ini, fungsi utama dijalankan seperti biasa, tetapi semua fungsi tertunda dilaksanakan dalam susunan terbalik apabila fungsi itu keluar. SO outputnya ialah :
start end defer 2 defer 1
Kini, menambah kata kunci tangguh pada JavaScript memerlukan banyak usaha. Tetapi itulah yang saya suka tentang JS—ia sangat serba boleh sehingga anda boleh melaksanakan ciri daripada bahasa pengaturcaraan lain tanpa perlu menyentuh pengkompil.
Tetapi pertama, mengapa kita memerlukan ini?
Terdapat banyak kes penggunaan yang berguna untuk kefungsian seperti penangguhan dalam pengaturcaraan, seperti:
Dan senarai itu diteruskan...
Sekarang, mari kita selami bahagian yang menyeronokkan: pelaksanaan penangguhan kita dalam JavaScript.
class Deferer { static stack = []; static wrapped = false; static defer(fn) { this.stack.push(fn); if (!this.wrapped) { throw new Error("can't call defer wihtout wrapping the function with Deferer.wrapper") } } static execute() { while (this.stack.length > 0) { const fn = this.stack.pop(); try { fn(); } catch (err) { throw new Error('Error in deferred function:', err); } } this.wrapped = false; } static wrapper = (cp) => (...args) => { if(this.wrapped) throw new Error("nested deferers are not supported"); this.wrapped = true; try { const v = cp(...args) this.execute() return v; } finally { this.wrapped = false; } } } const myDeferedFunction =Deferer.wrapper((a, b, c) => { console.log("Start of function", a, b, c); Deferer.defer(() => console.log("Deferred: Function 1")); Deferer.defer(() => console.log("Deferred: Function 2")); console.log("End of function", a, b, c); }); myDeferedFunction(8,8,8)
Output:
Start of function 8 8 8 End of function 8 8 8 Deferred: Function 2 Deferred: Function 1
Seperti yang dijangka, fungsi tertunda dilaksanakan selepas fungsi utama selesai, dalam susunan terbalik.
Terima kasih,
Ahmad
Atas ialah kandungan terperinci Melaksanakan konsep Golang defer ke dalam Javascript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!