ทำลายการดำเนินการจาวาสคริปต์จากวงเวลาภายใน

จะแยกลูปหมดเวลาภายใน a for ได้อย่างไร? ฉันพยายาม 'คืน' 'พัง' 'โยน' ดูเหมือนจะไม่มีอะไรทำงาน มันก็ดำเนินต่อไปด้วยการวนซ้ำ ถ้าฉันลองใช้ป้ายกำกับ ฉันได้รับข้อผิดพลาด:

Uncaught SyntaxError: ป้ายกำกับที่ไม่ได้กำหนด 'ฝ่าวงล้อม'

var r=0;
breakout:
for(i=0;i<5;i++) {
  setTimeout(function() {
    if(r) {
       alert("works");
    } else {
       throw new Error(alert("error"));
       break breakout;
    }
  }, 2000);
}

http://jsfiddle.net/hyc8j/1/


person user2035693    schedule 19.05.2013    source แหล่งที่มา


คำตอบ (4)


ฟังก์ชันนี้มีความล่าช้าในการดำเนินการ... หลังจากผ่านไป 2 วินาที ลูปได้ดำเนินการวนซ้ำทั้งห้าครั้งไปไกลแล้ว คุณควรใส่ลูปไว้ในฟังก์ชันโทรกลับ

และเพียงแค่ถามว่าคุณตั้งใจอะไรกับเรื่องนี้?

person Henrique Barcelos    schedule 19.05.2013
comment
นี่เป็นเพียงตัวอย่างของสิ่งที่ฉันทำ ในความเป็นจริงฉันมี for 3 ลูปและ if หนึ่งลูปที่ตรวจสอบเงื่อนไข และหากเงื่อนไขนั้นเป็นเท็จ จะดำเนินการฟังก์ชันตามกำหนดเวลาสองสามรายการ - person user2035693; 19.05.2013
comment
คุณต้องเข้าใจว่า setTimeout เป็น อะซิงโครนัส นั่นคือสาเหตุที่ไม่ได้ผล - person Henrique Barcelos; 19.05.2013
comment
หากคุณต้องการดำเนินการฟังก์ชันซ้ำหลายครั้ง คุณควรใช้ setInterval แทน setTimeout และลูป - person Henrique Barcelos; 19.05.2013

เท่าที่การทำงานของการแบ่งภายในสำหรับวงก็ใช้งานได้ ลองด้านล่างเลย มันได้ผล

for (i=0;i<10;i++)
  {
  if (i==3)
    {
  alert("Got break");
    break;
    }
  alert("did not break");
  }

มันเกิดขึ้นเนื่องจาก setTimeout เป็นฟังก์ชันอะซิงโครนัส ดูลิงก์ โดยใช้ setTimeout พร้อมกันใน JavaScript

person M Sach    schedule 19.05.2013

ตามความเข้าใจของฉันเกี่ยวกับโค้ดของคุณและคำถามของคุณ ฉันคิดว่าเราไม่สามารถแยกไทม์ไลน์ลูปได้ และในโค้ดของคุณหากคุณต้องการแยกลูป ให้เก็บคำสั่ง break ไว้นอกบล็อกไทม์มิ่ง

โปรดแก้ไขฉันหากฉันผิด

person rishikesh tadaka    schedule 19.05.2013

ตั้งชื่อให้กับลูปการหมดเวลาของคุณ

แล้วทำสิ่งนี้

var yourloop = ... 
clearTimeout(yourloop);

คุณจะทำลายการหมดเวลาของลูปด้วยสิ่งนี้

person doniyor    schedule 19.05.2013