2010-06-16 33 views
8

Tôi đang sử dụng một chức năng do thư viện của bên thứ ba cung cấp. Hàm này nhận hàm gọi lại làm tham số, nhưng tôi muốn đợi cuộc gọi lại này được gọi trước khi tiếp tục. Có cách nào tiêu chuẩn/được chấp nhận để thực hiện việc này không?chờ cho chức năng javascript không đồng bộ để trả lại

+12

chỉ chấp nhận sự không đồng bộ. không cố gắng chống lại nó. – Anurag

Trả lời

6

Tôi không chắc đây có phải là giải pháp khả thi cho bạn hay không nhưng bạn có thể đạt được kết quả mong muốn bằng cách chia nhỏ mã thành 2 chức năng. Giả sử đây là những gì bạn có ý định làm:

Về cơ bản đây là chức năng ban đầu của bạn:

function origFunc() { 

    codeBeforeThirdPartyFunc(); 
    ThirdPartyFunc(oldCallBackFunc); 
    Wait(); 
    codeAfterCallBackFunc(); 
} 

Bạn có thể thay đổi dòng chảy mã với một cái gì đó như:

function newFunc() { 
    codeBeforeThirdPartyFunc(); 
    ThirdPartyFunc(newCallBackFunc); 
} 
function newCallBackFunc() { 
    oldCallBackFunc(); 
    codeAfterCallBackFunc(); 
} 

Điều này sẽ loại bỏ sự chờ đợi vòng lặp. Và theo như tôi biết, chờ đợi bận rộn không hoạt động trong IE (bởi vì Chúa chỉ biết) ..

0

Tôi không biết liệu giải pháp của Sharad có hoạt động trong mọi trường hợp không (ví dụ: nếu bạn gọi hàm xa chuỗi mà bạn phải truyền dữ liệu dưới dạng biến thay vì tham số). Cùng một vấn đề với các biến toàn cầu. JavaScript không có khả năng "chờ".

Mặc dù tôi đã có một vấn đề tương tự và với jQuery, tôi đã kết thúc với một giải pháp loại MacGyver cung cấp cho bạn rất nhiều điều khiển khi các hàm javascript thực thi. Tôi chỉ đăng nó ở đây như là một câu trả lời cho câu hỏi của riêng tôi (nhưng tôi là câu trả lời chưa được kiểm tra - hãy tìm tên người dùng Emile của tôi): How to get a variable returned across multiple functions - Javascript/jQuery

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