How do I simulate a slow Meteor publication?

I'm trying to simulate a publication doing a bunch of work and taking a long time to return a cursor.

My publish method has a forced sleep (using a future), but the app always displays only


Here's the publication:

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();

And the router:

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


Full source code:



The easiest way to do this is to use the undocumented Meteor._sleepForMs function like so:

Meteor.publish('people', function() {
  return People.find();


Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.