คำถามติดแท็ก settimeout

setTimeout เป็นวิธีการของ JavaScript ทั่วโลกที่ใช้ในการเรียกใช้ฟังก์ชันหรือโค้ดบางส่วนหลังจากการหน่วงเวลาที่กำหนด

28
ฉันจะส่งพารามิเตอร์ไปยังการเรียกกลับ setTimeout () ได้อย่างไร
ฉันมีรหัสจาวาสคริปต์ที่มีลักษณะดังนี้: function statechangedPostQuestion() { //alert("statechangedPostQuestion"); if (xmlhttp.readyState==4) { var topicId = xmlhttp.responseText; setTimeout("postinsql(topicId)",4000); } } function postinsql(topicId) { //alert(topicId); } ฉันได้รับข้อผิดพลาดที่topicIdไม่ได้กำหนดทุกอย่างทำงานก่อนที่ฉันจะใช้setTimeout()ฟังก์ชั่น ฉันต้องการให้postinsql(topicId)ฟังก์ชันของฉันถูกเรียกหลังจากเวลาผ่านไปครู่หนึ่ง ฉันควรทำอย่างไรดี?

10
การรวมกันของฟังก์ชั่น async + รอ + setTimeout
ฉันกำลังพยายามใช้คุณสมบัติใหม่ของ async และฉันหวังว่าการแก้ปัญหาของฉันจะช่วยผู้อื่นในอนาคต นี่คือรหัสของฉันซึ่งใช้งานได้: async function asyncGenerator() { // other code while (goOn) { // other code var fileList = await listFiles(nextPageToken); var parents = await requestParents(fileList); // other code } // other code } function listFiles(token) { return gapi.client.drive.files.list({ 'maxResults': sizeResults, 'pageToken': token, 'q': query }); } ปัญหาคือขณะที่ลูปของฉันทำงานเร็วเกินไปและสคริปต์ส่งคำขอมากเกินไปต่อวินาทีไปยัง google …

5
ผ่านบริบท“ นี่” ที่ถูกต้องไปยัง setTimeout callback หรือไม่
ฉันจะส่งผ่านบริบทได้setTimeoutอย่างไร ฉันต้องการโทรthis.tip.destroy()ถ้าเกินthis.options.destroyOnHide1,000 มิลลิวินาที ฉันจะทำสิ่งนั้นได้อย่างไร if (this.options.destroyOnHide) { setTimeout(function() { this.tip.destroy() }, 1000); } เมื่อฉันลองด้านบนthisหมายถึงหน้าต่าง

6
ความแตกต่างระหว่าง setTimeout ทั้งที่มีและไม่มีเครื่องหมายคำพูดและวงเล็บ
ฉันกำลังเรียนรู้ JavaScript และฉันได้เรียนรู้เมื่อเร็ว ๆ นี้เกี่ยวกับเหตุการณ์กำหนดเวลา JavaScript เมื่อฉันเรียนรู้setTimeoutที่W3Schoolsฉันสังเกตเห็นรูปแปลก ๆ ที่ฉันไม่เคยพบเจอมาก่อน พวกเขากำลังใช้เครื่องหมายคำพูดคู่แล้วเรียกใช้ฟังก์ชัน ตัวอย่าง: setTimeout("alertMsg()", 3000); ฉันรู้ว่าอัญประกาศคู่และเดี่ยวใน JavaScript หมายถึงสตริง นอกจากนี้ฉันเห็นว่าฉันสามารถทำเช่นเดียวกัน: setTimeout(alertMsg, 3000); ด้วยวงเล็บมันคือการอ้างอิงโดยไม่ต้องวงเล็บมันคัดลอก เมื่อฉันใช้คำพูดและวงเล็บมันเริ่มบ้า ฉันจะดีใจถ้ามีคนอธิบายให้ฉันฟังถึงความแตกต่างระหว่างการใช้ทั้งสามวิธีsetTimeout: ด้วยวงเล็บ: setTimeout("alertMsg()", 3000); ไม่มีเครื่องหมายคำพูดและวงเล็บ: setTimeout(alertMsg, 3000); และอันที่สามใช้คำพูดเท่านั้น: setTimeout("alertMsg", 3000); หมายเหตุ: เป็นแหล่งที่ดีกว่าสำหรับsetTimeoutการอ้างอิงจะMDN



4
ฉันจะเคลียร์ setInterval ภายในฟังก์ชันได้อย่างไร
โดยปกติฉันจะตั้งช่วงเวลาให้กับตัวแปรแล้วล้างออกเหมือนvar the_int = setInterval(); clearInterval(the_int);แต่เพื่อให้โค้ดของฉันทำงานฉันวางมันลงในฟังก์ชั่นนิรนาม: function intervalTrigger() { setInterval(function() { if (timedCount >= markers.length) { timedCount = 0; } google.maps.event.trigger(markers[timedCount], "click"); timedCount++; }, 5000); }; intervalTrigger(); ฉันจะล้างสิ่งนี้ได้อย่างไร ฉันให้มันยิงและพยายามvar test = intervalTrigger(); clearInterval(test);ที่จะให้แน่ใจ แต่นั่นไม่ได้ โดยทั่วไปฉันต้องการสิ่งนี้เพื่อหยุดเรียกเมื่อ Google แผนที่ของฉันถูกคลิกเช่น google.maps.event.addListener(map, "click", function() { //stop timer });

6
Chrome: หมดเวลา / ช่วงเวลาถูกระงับในแท็บพื้นหลัง?
ฉันกำลังทดสอบความแม่นยำของการsetTimeoutใช้การทดสอบนี้ ตอนนี้ฉันสังเกตว่า (ตามที่คาดไว้) setTimeoutไม่ค่อยแม่นยำนัก แต่สำหรับอุปกรณ์ส่วนใหญ่ไม่แม่นยำอย่างมาก ตอนนี้ถ้าฉันเรียกใช้การทดสอบใน Chrome และปล่อยให้มันทำงานในแท็บพื้นหลัง (ดังนั้นให้เปลี่ยนไปใช้แท็บอื่นและเรียกดูที่นั่น) กลับไปที่การทดสอบและตรวจสอบผลลัพธ์ (หากการทดสอบเสร็จสิ้น) จะมีการเปลี่ยนแปลงอย่างมาก ดูเหมือนว่าการหมดเวลาจะทำงานช้าลงมาก ทดสอบใน FF4 หรือ IE9 สิ่งนี้ไม่เกิดขึ้น ดูเหมือนว่า Chrome จะระงับหรืออย่างน้อยก็ชะลอการเรียกใช้จาวาสคริปต์ในแท็บที่ไม่มีโฟกัส ไม่สามารถหาข้อมูลเกี่ยวกับเรื่องนี้ได้มากนัก หมายความว่าเราไม่สามารถรันงานเบื้องหลังได้เช่นการตรวจสอบเป็นระยะ ๆ บนเซิร์ฟเวอร์โดยใช้การเรียก XHR และsetInterval(ฉันสงสัยว่าจะเห็นพฤติกรรมเดียวกันsetIntervalนี้จะเขียนการทดสอบถ้ามีเวลาอยู่กับฉัน) มีใครเจอแบบนี้บ้าง? จะมีวิธีแก้ปัญหาสำหรับการระงับ / การชะลอตัวนี้หรือไม่? คุณจะเรียกมันว่าจุดบกพร่องหรือไม่และฉันควรแจ้งว่าเป็นข้อบกพร่อง


7
TypeScript - ใช้ setTimeout เวอร์ชันที่ถูกต้อง (โหนดเทียบกับหน้าต่าง)
ฉันทำงานเกี่ยวกับการอัพเกรดรหัส typescript setTimeoutบางเก่าที่จะใช้รุ่นคอมไพเลอร์ล่าสุดและฉันมีปัญหากับการเรียกร้องให้ รหัสคาดว่าจะเรียกใช้setTimeoutฟังก์ชันของเบราว์เซอร์ซึ่งส่งคืนตัวเลข: setTimeout(handler: (...args: any[]) => void, timeout: number): number; อย่างไรก็ตามคอมไพลเลอร์กำลังแก้ไขสิ่งนี้กับการนำโหนดไปใช้แทนซึ่งจะส่งคืน NodeJS.Timer: setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; รหัสนี้ไม่ทำงานในโหนด แต่การพิมพ์ของโหนดจะถูกดึงเข้ามาเป็นการอ้างอิงกับสิ่งอื่น (ไม่แน่ใจว่าอะไร) ฉันจะสั่งให้คอมไพเลอร์เลือกเวอร์ชันsetTimeoutที่ฉันต้องการได้อย่างไร นี่คือรหัสที่เป็นปัญหา: let n: number; n = setTimeout(function () { /* snip */ }, 500); สิ่งนี้ก่อให้เกิดข้อผิดพลาดของคอมไพเลอร์: TS2322: ประเภท 'Timer' ไม่สามารถกำหนดให้พิมพ์ 'number' ได้

7
setInterval ในแอป React
ฉันยังค่อนข้างใหม่ที่ React แต่ฉันค่อยๆบดไปเรื่อย ๆ และฉันเจอบางอย่างที่ฉันติดขัด ฉันกำลังพยายามสร้างองค์ประกอบ "ตัวจับเวลา" ใน React และพูดตามตรงว่าฉันไม่รู้ว่าฉันทำถูกต้อง (หรือมีประสิทธิภาพ) ในรหัสของฉันด้านล่างผมตั้งรัฐที่จะกลับวัตถุ{ currentCount: 10 }และได้รับ toying กับcomponentDidMount, componentWillUnmountและrenderและฉันเท่านั้นจะได้รับของรัฐที่จะ "นับถอยหลัง" 10-9 คำถามสองส่วน: ฉันผิดอะไร และมีวิธีที่มีประสิทธิภาพมากกว่าในการใช้ setTimeout (แทนที่จะใช้componentDidMount& componentWillUnmount) หรือไม่? ขอบคุณล่วงหน้า. import React from 'react'; var Clock = React.createClass({ getInitialState: function() { return { currentCount: 10 }; }, componentDidMount: function() { this.countdown = …

7
เหตุใด setTimeout () จึง "หยุดพัก" สำหรับค่าการหน่วงเวลามิลลิวินาทีขนาดใหญ่
setTimeout()ฉันมาข้ามพฤติกรรมที่ไม่คาดคิดเมื่อผ่านค่ามิลลิวินาทีขนาดใหญ่ ตัวอย่างเช่น setTimeout(some_callback, Number.MAX_VALUE); และ setTimeout(some_callback, Infinity); ทำให้ทั้งสองsome_callbackถูกเรียกใช้เกือบจะในทันทีราวกับว่าฉันผ่านไป0แทนที่จะเป็นตัวเลขจำนวนมากเมื่อเกิดความล่าช้า ทำไมสิ่งนี้ถึงเกิดขึ้น?

7
ปัญหา setTimeout / clearTimeout
ฉันพยายามสร้างหน้าเพื่อไปที่หน้าเริ่มต้นหลังจากเช่น ไม่มีการใช้งาน 10 วินาที (ผู้ใช้ไม่ได้คลิกที่ใดก็ได้) ฉันใช้ jQuery สำหรับส่วนที่เหลือ แต่ set / clear ในฟังก์ชันทดสอบของฉันเป็น javascript ล้วน ในความผิดหวังของฉันฉันจบลงด้วยฟังก์ชั่นบางอย่างเช่นนี้ซึ่งฉันหวังว่าฉันจะสามารถเรียกใช้เมื่อคลิกบนหน้าใดก็ได้ ตัวจับเวลาเริ่มต้นได้ดี แต่ไม่ได้รีเซ็ตเมื่อคลิก หากมีการเรียกใช้ฟังก์ชัน 5 ครั้งภายใน 10 วินาทีแรกการแจ้งเตือน 5 ครั้งจะปรากฏขึ้น ... ไม่ชัดเจนไทม์เอาต์ ... function endAndStartTimer() { window.clearTimeout(timer); var timer; //var millisecBeforeRedirect = 10000; timer = window.setTimeout(function(){alert('Hello!');},10000); } มีใครมีโค้ดบางบรรทัดที่จะทำเคล็ดลับ? - เมื่อคลิกหยุดรีเซ็ตและเริ่มจับเวลา - เมื่อจับเวลาฮิตเช่น 10 วินาทีทำบางสิ่ง

3
วิธีการทำสัญญาจาก setTimeout
นี่ไม่ใช่ปัญหาในโลกแห่งความเป็นจริงฉันแค่พยายามทำความเข้าใจว่าสัญญาถูกสร้างขึ้นมาอย่างไร ฉันต้องเข้าใจวิธีสร้างคำมั่นสัญญาสำหรับฟังก์ชันที่ไม่ส่งคืนค่าใด ๆ เช่น setTimeout สมมติว่าฉันมี: function async(callback){ setTimeout(function(){ callback(); }, 5000); } async(function(){ console.log('async called back'); }); ฉันจะสร้างสัญญาที่asyncสามารถกลับมาหลังจากsetTimeoutพร้อมที่จะทำcallback()อย่างไร? ฉันคิดว่าการห่อมันจะพาฉันไปที่ไหนสักแห่ง: function setTimeoutReturnPromise(){ function promise(){} promise.prototype.then = function() { console.log('timed out'); }; setTimeout(function(){ return ??? },2000); return promise; } แต่ฉันไม่สามารถคิดนอกเหนือจากนี้

6
ล่าช้า jquery hover เหตุการณ์?
ฉันต้องการเลื่อนเหตุการณ์ที่เลื่อนใน jquery ฉันกำลังอ่านจากไฟล์เมื่อผู้ใช้วางเมาส์เหนือลิงก์หรือป้ายกำกับ ฉันไม่ต้องการให้เหตุการณ์นี้เกิดขึ้นทันทีในกรณีที่ผู้ใช้เพียงแค่เลื่อนเมาส์ผ่านหน้าจอ มีวิธีชะลอไม่ให้เหตุการณ์เกิดขึ้นหรือไม่? ขอขอบคุณ. รหัสตัวอย่าง: $(function() { $('#container a').hover(function() { $('<div id="fileinfo" />').load('ReadTextFileX.aspx', {filename:'file.txt'}, function() { $(this).appendTo('#info'); } ); }, function() { $('#info').remove(); } }); }); อัปเดต: (1/14/09) หลังจากเพิ่มปลั๊กอิน HoverIntent โค้ดด้านบนถูกเปลี่ยนเป็นโค้ดต่อไปนี้เพื่อใช้งาน ใช้งานง่ายมาก $(function() { hiConfig = { sensitivity: 3, // number = sensitivity threshold (must be 1 or …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.