2014-11-08 15 views
10

Sto provando a simulare una pubblicazione facendo un mucchio di lavoro e impiegando molto tempo a restituire un cursore.Come si simula una pubblicazione di Meteor lenta?

Il mio pubblicare metodo ha un sonno forzato (usando un futuro), ma l'applicazione visualizza sempre solo

Loading ...

Ecco la pubblicazione:

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

E il 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'); 

il codice sorgente completo: https://gitlab.com/meonkeys/meteor-simulate-slow-publication

risposta

27

Il modo più semplice per farlo è quello di utilizzare la funzione non documentata Meteor._sleepForMs in questo modo:

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

Handy, grazie! Ho aggiornato la mia domanda per mostrare l'errore di codifica che ho fatto anch'io. –

+6

Suggerimento: non provare a cercare "Meteor._sleepForMs" sul client, è un metodo solo server. –

+0

Domanda: Questo ha funzionato per me, grazie. Ma solo una volta. Credo che dopo il primo caricamento la pubblicazione venga memorizzata nella cache sul client. C'è un modo per simulare una connessione più lenta ad ogni aggiornamento? (O almeno per testarlo di nuovo?) – Arrowcatch

Problemi correlati