2012-11-22 19 views
9

Tôi có một loại kết nối chậm giữa máy chủ sao băng của tôi và cá thể mongodb từ xa. Tôi có thể bằng cách nào đó chờ đợi ở phía khách hàng và không đăng ký thuê bao cho đến khi máy chủ không được thiết lập kết nối với mongo?Cách đợi ở phía máy khách cho đến khi kết nối với mongo ở phía máy chủ đã sẵn sàng chưa?

+0

Bạn nên sửa câu hỏi của bạn nếu bạn có một bản cập nhật. – knownasilya

Trả lời

2

Một cách nguyên thủy để làm điều này là lắng nghe sự thay đổi trong Meteor.userId() sử dụng Meteor.autorun. Nếu bạn có thể nhận được điều này, bạn sẽ biết rằng bạn đã kết nối với MongoDB. Nếu bạn không giao dịch với xác thực, thì bạn có thể tạo một phương thức ở phía máy chủ trả về một cái gì đó từ MongoDB. Khi nó trả về một cái gì đó, về thành công ở phía khách hàng, bạn có thể bắt đầu tất cả các đăng ký.

+0

Vâng, đây là cách hữu ích và dễ dàng nhất để làm điều đó. –

+0

Nên có một cách tốt hơn để kiểm tra sự sẵn sàng của Mongo nhưng tôi không nghĩ nó nằm trong danh sách ưu tiên cho Meteor ngay bây giờ. – HGandhi

2

Cách đáng tin cậy nhất để thực hiện việc này là thông qua lời gọi Meteor.call. Nếu bạn thực hiện điều này như một cuộc gọi đồng bộ (không gọi lại), máy khách sẽ đợi cho đến khi cuộc gọi kết thúc. Dưới đây là làm thế nào để làm điều đó không đồng bộ:

Meteor.call('isEverythingReady', param1, 
    function(error, result) { 
     if (error === undefined) { 
     Meteor.subscribe("mystuff"); 
     Session.set("sess1", "whatever"); 
     } else { 
     alert("There was an error during startup."); 
     } 
    }); 

và sau đó

if (Meteor.isServer) { 
    Meteor.methods({ 
    isEverythingReady: function(param1) { 
     // can you connect to database? 
     return true; 
    } 
    } 
} 
+0

Tôi đã có cùng một vấn đề trên một trong các dự án của tôi trong Meteor và câu trả lời này đã làm việc khi tôi đã đi qua tài liệu của họ và tìm ra bản thân mình làm thế nào để làm điều đó. Tuy nhiên, có lẽ bạn nên liệt kê cách thực hiện các chức năng (Thêm chỉnh sửa cho câu trả lời của bạn) – Charles

+0

Không chắc chắn tôi hiểu nhận xét của bạn - chức năng gọi lại được hiển thị trong đoạn mã ở trên. –

+0

Vâng vâng nhưng chức năng gọi không được liệt kê trên làm thế nào để tạo ra nó, khi tôi ban đầu đã cố gắng này tôi đã cố gắng để thực hiện một chức năng mặc định x() thay vì một meteor.methods(). Và đối với câu hỏi trong nhận xét, có bạn có thể kết nối với cơ sở dữ liệu theo cách đó. – Charles

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