เมื่อเร็ว ๆ นี้ฉันกำลังดู Express และฉันได้เห็นมันทุกที่โดยใช้ฟังก์ชั่นการโทรกลับเป็นพารามิเตอร์ หากไม่สามารถเข้าใจแนวคิดนี้รหัสของ NodeJs และ Express จะสับสนมาก ตัวอย่างเช่น:
การคัดลอกรหัสมีดังนี้:
app.use (function (req, res, ถัดไป) {
var err = ข้อผิดพลาดใหม่ ('ไม่พบ');
err.status = 404;
ถัดไป (เอ่อ);
-
แอพเป็นวัตถุการใช้เป็นวิธีการและพารามิเตอร์ของวิธีการเป็นฟังก์ชั่นที่ไม่ระบุชื่อพร้อมพารามิเตอร์และร่างกายฟังก์ชั่นจะได้รับโดยตรงในภายหลัง คุณเข้าใจรหัสนี้ได้อย่างไร? ก่อนอื่นให้เข้าใจแนวคิดของฟังก์ชั่นการโทรกลับ
ก่อนอื่นเราต้องเข้าใจว่าใน JS ฟังก์ชั่นเป็นวัตถุซึ่งสามารถกำหนดให้กับตัวแปรและสามารถวางเป็นพารามิเตอร์ในรายการพารามิเตอร์ของฟังก์ชั่น ตัวอย่างเช่น:
การคัดลอกรหัสมีดังนี้:
var dosomething = function (a, b)
-
ส่งคืน A + B;
-
รหัสนี้หมายถึงการกำหนดฟังก์ชันที่ไม่ระบุชื่อ ยกเว้นไม่มีชื่อฟังก์ชั่นที่ไม่ระบุชื่อนี้ไม่แตกต่างจากฟังก์ชั่นธรรมดา จากนั้นกำหนดฟังก์ชั่นที่ไม่ระบุชื่อให้กับ Dosomething ตัวแปร ต่อไปเราโทร:
การคัดลอกรหัสมีดังนี้:
console.log (Dosomething (2,3));
เอาต์พุตนี้ 5.
ฟังก์ชั่นการเรียกกลับถูกวางไว้ในรายการพารามิเตอร์ของฟังก์ชันอื่น (เช่นพาเรนต์) ส่งผ่านไปยังพาเรนต์เป็นพารามิเตอร์จากนั้นดำเนินการที่ตำแหน่งที่แน่นอนในร่างกายฟังก์ชันหลัก หากต้องการนำไปใช้เป็นนามธรรมให้ดูตัวอย่าง:
การคัดลอกรหัสมีดังนี้:
// เพื่อแสดงแนวคิดของการโทรกลับ
var doit = function (callback)
-
var a = 1
b = 2,
C = 3;
var t = การโทรกลับ (a, b, c);
กลับ t + 10;
-
var d = doit (ฟังก์ชั่น (x, y, z) {
return (x+y+z);
-
console.log (d);
ก่อนกำหนดฟังก์ชั่น DOIT และมีการเรียกพารามิเตอร์ การโทรกลับนี้เป็นฟังก์ชั่นการโทรกลับและชื่อสามารถดำเนินการโดยพลการ ดูที่ร่างกายฟังก์ชั่นแรกกำหนดตัวแปรสามตัว A, B และ C จากนั้นเรียกใช้ฟังก์ชันการโทรกลับ ในที่สุดค่าจะถูกส่งคืน
ต่อไปนี้เป็นฟังก์ชั่น doit ควรสังเกตว่าเมื่อคุณกำหนด doit ในตอนนี้การโทรกลับไม่ได้กำหนดดังนั้นคุณจึงไม่รู้ว่าการโทรกลับมีไว้เพื่ออะไร นี่เป็นเรื่องง่ายที่จะเข้าใจ เมื่อเรากำหนดฟังก์ชั่นพารามิเตอร์จะให้ชื่อเท่านั้นเช่น A โดยใช้ A in the Function Body แต่กระบวนการทั้งหมดไม่ทราบว่า A คืออะไร เฉพาะเมื่อมีการระบุฟังก์ชั่นเช่น 2 มองย้อนกลับไปเมื่อโทร DoIT เราต้องระบุว่าการโทรกลับคืออะไร อย่างที่คุณเห็นฟังก์ชั่นนี้เสร็จสิ้นฟังก์ชั่นผลรวม
กระบวนการดำเนินการของรหัสข้างต้นคือ:
เรียกฟังก์ชัน doIT พารามิเตอร์เป็นฟังก์ชันที่ไม่ระบุชื่อ ป้อนฟังก์ชั่นของ DoIT ก่อนกำหนด A, B, C และจากนั้นดำเนินการฟังก์ชันที่ไม่ระบุชื่อตอนนี้พารามิเตอร์คือ A, B, C และกลับ T และในที่สุดก็ส่งคืน T+10 ถึง D
กลับไปที่ตัวอย่างดั้งเดิม app.use (... ) คือการเรียกใช้ฟังก์ชัน เราสามารถจินตนาการได้ว่าต้องมีการกำหนดวิธีการใช้งานมาก่อน แต่ไม่ได้รับที่นี่ โดยการเปรียบเทียบตัวอย่างทั้งสองนี้คุณสามารถเข้าใจได้ทันที
เมื่อใช้ NodeJs และ Express มันเป็นไปไม่ได้ที่เราจะค้นหาคำจำกัดความของฟังก์ชั่นของแต่ละวิธีหรือฟังก์ชั่นเพื่อดู ดังนั้นเพียงรู้ว่าพารามิเตอร์ใดที่ส่งผ่านไปยังการโทรกลับในคำจำกัดความนั้น จากนั้นเมื่อเรียกใช้วิธีการหรือฟังก์ชั่นเราจะกำหนดฟังก์ชั่นที่ไม่ระบุชื่อในพารามิเตอร์เพื่อให้ฟังก์ชั่นบางอย่างเสร็จสมบูรณ์
เกิน!