2014-11-08 9 views
10

Próbuję zasymulować publikację wykonującą kilka prac i poświęcenie czasu na zwrócenie kursora.Jak mogę symulować powolną publikację Meteor?

Moja publikuje metody ma wymuszonego snu (przy użyciu przyszłości), ale aplikacja zawsze wyświetla tylko

Loading ...

Oto publikacja:

Meteor.publish('people', function() { 
    Future = Npm.require('fibers/future'); 
    var future = new Future(); 

    //simulate long pause 
    setTimeout(function() { 
    // UPDATE: coding error here. This line needs to be 
    // future.return(People.find()); 
    // See the accepted answer for an alternative, too: 
    // Meteor._sleepForMs(2000); 
    return People.find(); 
    }, 2000); 

    //wait for future.return 
    return future.wait(); 
}); 

i router:

Router.configure({ 
    layoutTemplate: 'layout', 
    loadingTemplate: 'loading' 
}); 

Router.map(function() { 
    return this.route('home', { 
    path: '/', 
    waitOn: function() { 
     return [Meteor.subscribe('people')]; 
    }, 
    data: function() { 
     return { 
     'people': People.find() 
     }; 
    } 
    }); 
}); 

Router.onBeforeAction('loading'); 

Pełny kod źródłowy: https://gitlab.com/meonkeys/meteor-simulate-slow-publication

Odpowiedz

27

Najprostszym sposobem, aby to zrobić jest użycie nieudokumentowane Meteor._sleepForMs funkcję tak:

Meteor.publish('people', function() { 
    Meteor._sleepForMs(2000); 
    return People.find(); 
}); 
+0

Handy, dzięki! Zaktualizowałem moje pytanie, aby pokazać również popełniony przeze mnie błąd kodowania. –

+6

Podpowiedź: nie próbuj szukać "Meteor._sleepForMs" u klienta, jest to metoda tylko serwerowa. –

+0

Pytanie: To zadziałało dla mnie, dzięki. Ale tylko raz. Przypuszczam, że po pierwszym załadowaniu publikacja jest buforowana na kliencie. Czy istnieje sposób symulacji wolniejszego połączenia przy każdym odświeżeniu? (Lub przynajmniej przetestować to znowu?) – Arrowcatch

Powiązane problemy