2010-07-11 21 views
5

Tôi đã thực hiện chức năng JavaScript để kiểm tra mỗi 100 ms nếu một biến toàn cầu được tải. Khi biến sẽ được nạp, hàm sẽ trả về giá trị của biến số như được hiển thị bên dưới. Trong mã của tôi, tôi sử dụng máy chủ HTTP trong JavaScript, và biến sẽ được tải khi có yêu cầu HTTP cụ thể với các tiêu đề cụ thể đến máy chủ của tôi.cách đợi với setTimeout cho đến khi biến được tải và, đồng thời, nhận yêu cầu HTTP!

function checkVariable() 
{ 
    if (myvar != null) 
    { 
      return myVar; 
    } 
    else 
    { 
      window.setTimeout("checkVariable();",100); 
    } 
} 

tôi sử dụng chức năng này trong một đoạn mã như thế này:

// arithmetis operations... [1] 

myVar = checkVariable(); 

// arithmetic operations that use myVar [2] 

myVar được bắt đầu với null. Vấn đề là các hoạt động số học trong [2] được thực hiện trước khi myVar nhận được giá trị của nó. Thay vào đó, tôi muốn mã của tôi phải chờ cho đến khi myVar nhận được giá trị của nó và sau đó tiếp tục với các hoạt động.

Trước khi thử hàm setTimeout, tôi đã cố gắng để mã chờ đợi bằng cách sử dụng vòng lặp while, nhưng vấn đề là máy chủ HTTP không thể nhận bất kỳ yêu cầu HTTP nào do việc thực hiện liên tục vòng lặp while!

Ai đó có thể giúp tôi giải quyết vấn đề này?

Cảm ơn bạn trước!

Trả lời

11

Tôi có thể sẽ thực hiện các hoạt động đối xứng số còn lại gọi lại. Một cái gì đó như:

function checkVariable() 
{ 
    if (myvar != null) 
    { 
      computeVariable(myVar); 
    } 
    else 
    { 
      window.setTimeout("checkVariable();",100); 
    } 
} 

Sau đó:

// arithmetis operations... [1] 

myVar = checkVariable(); 

function computeVariable(myVar) { 
    // arithmetic operations that use myVar [2] 
} 
+0

Cảm ơn bạn jpoz! Đó là một ý tưởng hay! Tôi sẽ thử nó! Mặc dù tôi muốn một giải pháp không sử dụng các cuộc gọi lại, bởi vì sau khi tính toán tôi muốn lặp lại toàn bộ quá trình nhiều lần. Đó là, để làm cho null myVar một lần nữa và kiểm tra thời tiết một số giá trị khác được nạp vào nó, để thực hiện các thao tác khác .. –

+0

Tốt nhất là tránh sử dụng chuỗi cho tên phương thức.). – Yoda

Các vấn đề liên quan