เกือบทุกสถานที่ในโหนดที่ใช้ฟังก์ชั่นการโทรกลับมีความสัมพันธ์แบบอะซิงโครนัส รหัสที่อยู่เบื้องหลังฟังก์ชั่นการโทรกลับมีแนวโน้มที่จะถูกเรียกใช้ก่อนมากกว่ารหัสในฟังก์ชั่นการโทรกลับโดยเฉพาะการดำเนินการฐานข้อมูล แน่นอนโหนดยังมีฟังก์ชั่นสำหรับรุ่นซิงโครนัสเช่นการดำเนินการไฟล์ fs.readfilesync () เป็นรุ่นซิงโครนัสของ fs.readfile ()
ดังนั้นคำถามคือ foreach () แบบอะซิงโครนัสหรือไม่? การพูดอย่างมีเหตุผลหากไม่ได้เพิ่มการซิงค์ควรเป็นแบบอะซิงโครนัส
การคัดลอกรหัสมีดังนี้:
var arr = ['a', 'b', 'c'];
var str = '123';
arr.foreach (ฟังก์ชั่น (รายการ) {
str += รายการ;
ในขณะที่ (จริง) {}; // ใช้ห่วงที่ตายแล้วติดอยู่ ~~
-
console.log (str);
เรียกใช้รหัสด้านบนและมันก็ติดอยู่โดยไม่มีผลลัพธ์ใด ๆ -
ดังนั้น foreach () ในโหนดถูกซิงโครไนซ์! -
เมื่อฉันใช้โหนดครั้งแรกฉันไม่ได้พิจารณาปัญหานี้ดังนั้นฉันจึงเขียนมันแบบซิงโครนัส ทันใดนั้นฉันก็คิดว่าหลังจากการทดสอบฉันตกใจและคิดว่ารหัสก่อนหน้านี้ถูกเขียนอย่างไม่ถูกต้อง
หากในบางกรณี foreach จำเป็นต้องดำเนินการแบบอะซิงโครนัส, Google IT และมีโหนด-อาร์เรย์คุณสามารถลองได้ ~~ พอร์ทัล: https://github.com/cfsghost/node-array
งานนี้สร้างขึ้นโดย http://www.cnblogs.com/imyzf