Tôi muốn mã của mình đợi một vài giây trước khi thực thi. Vì vậy, có bất kỳ chức năng tương tự như giấc ngủ trong flex?Có chức năng ngủ trong flex không?
Trả lời
Không có chức năng ngủ hoặc trì hoãn trong ActionScript. Giống như JavaScript, bạn có thể sử dụng thay vì setTimeout()
như thế này:
function trigger():void { setTimeout(doIt, 1000); }
function doIt():void { Alert.show("done!"); }
Khi bạn liên kết các trigger()
chức năng cho bất kỳ sự kiện như nghe tiếng ‘click’, khi sự kiện xảy ra hộp cảnh báo sẽ xuất hiện sau khi 1 giây.
Ngoài ra còn có các chức năng setInterval()
và clearlnterval()
bạn có thể sử dụng để lặp lại. Tuy nhiên, bạn nên sử dụng lớp flash.utils.Timer
trong trường hợp đó.
private var myTimer:Timer;
private function init():void {
myTimer = new Timer(5000, 1);
myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerHandler);
myTimer.start();
}
public function timerHandler(event:TimerEvent):void {
Alert.show("I was delayed!");
}
Tôi khuyên bạn nên tạo ví dụ bằng Bộ hẹn giờ chứ không phải setTimeout. –
cảm ơn vì phản hồi tôi đã cập nhật câu trả lời của mình. –
FYI nếu bạn phải sử dụng setTimeOut, hãy chắc chắn gọi clearTimeOut, hoặc bạn có nguy cơ bị rò rỉ bộ nhớ. Tuy nhiên, tôi sẽ không quá nhanh để chỉ trả lời câu hỏi ở đây ... Tôi nghi ngờ có một sự hiểu lầm cơ bản về bản chất không đồng bộ của flash/flex mà chúng ta sẽ có cơ hội để làm sáng tỏ. –
Nó luôn phụ thuộc vào những gì bạn đang cố gắng làm.
Tôi thấy bạn đang sử dụng Flex. Có một tính năng gọn gàng trong Flex được gọi là callLater, được kích hoạt trong UIComponent. Nó tương tự như setTimeout đang được sử dụng nhưng chức năng sẽ tự động được gọi vào chu kỳ cập nhật tiếp theo thay vì một khoảng thời gian đã đặt. Giả sử bạn thiết lập một số dữ liệu cho một DataGrid và những gì để chọn một ô/hàng cụ thể trong đó. Bạn sẽ sử dụng callLater để đảm bảo DataGrid có thời gian xử lý dữ liệu. Dưới đây là một ví dụ:
protected function dummy():void
{
myComponent.callLater(myFunction, ["this is a message"])
}
protected function myFunction(message:String):void
{
Alert.show(message);
}
Nếu bạn chỉ muốn trì hoãn thực hiện một lần, setTimeout là cách để thực hiện. Nếu bạn muốn thực hiện điều gì đó nhiều hơn một lần tại các khoảng thời gian xác định, hãy sử dụng Timer thực sự.
Nếu nó phản ứng với một số hành động, chẳng hạn như chức năng lưu từ xa, tôi khuyên bạn nên sử dụng các sự kiện thay thế và lắng nghe điều gì đó giống như sự kiện SAVE_COMPLETE.
+1 cho ít nhất là đề cập đến các sự kiện có khả năng là cách để giải quyết vấn đề tiềm ẩn vấn đề cơ bản là OP đang cố gắng giải quyết! –
Không có chức năng ngủ trong ActionScript. Mọi thứ đều chạy trong một chuỗi, do đó, nó cũng sẽ chặn tất cả các tương tác giao diện người dùng, thường được coi là một cách không tốt để đi.
Tùy chọn gần nhất là sử dụng lớp Hẹn giờ chỉ được bắt đầu trong hàm đang được đề cập và "kích hoạt" mã mà bạn muốn đợi sau khi hoàn thành chờ 2 giây.
chức năng:
private function whereWeStartTimer():void{
//misc code that you always execute before starting your timer
var timer:Timer = new Timer(2000); // 2 second wait
timer.addEventListener(TimerEvent.TIMER,functionTimerFlagged);
timer.start();
}
private function functionTimerFlagged(event:TimerEvent):void{
var targetTimer:Timer = event.target as Timer;
targetTimer.removeEventListener(TimerEvent.TIMER,functionTimerFlagged);
targetTimer.stop();
//put your code here that you wanted to execute after two seconds
//force-ably destroy timer to ensure garbage collection(optional)
targetTimer = null;
}
gì nếu tôi đã phải thực hiện nút hẹn giờ như thế nào trong điều kiện sau đây? Tôi có một sự kiện nhấp chuột bản đồ hiển thị thông tin trên cửa sổ bản đồ. Tôi cần lấy thông tin từ DB ở giữa. Bây giờ để hiển thị thông tin được tìm nạp trong cửa sổ bật lên của thông tin, cần có thời gian.
Tôi nghĩ tốt hơn là nên tạo giấc ngủ hoặc hẹn giờ ở giữa nhấp chuột bản đồ và thông tin bật lên để dữ liệu đã tìm nạp có thể được hiển thị.
[Timer] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/Timer.html) – RIAstar