2016-09-06 5 views
0

Ich bin neu in Meteor zu lesen. Ich verwende folgenden Code, um eine Datei zu lesen, die auf dem Server gespeichert ist.Meteor synchronen und asynchronen Aufruf einer Datei

Client-Seite

Meteor.call('parseFile', (err, res) => { 
    if (err) { 
    alert(err); 
    } else { 
    Session.set("result0",res[0]); 
    Session.set("result1",res[1]); 
    Session.set("result2",res[2]); 
    } 
}); 
let longitude = Session.get("result0"); 
let latitude = Session.get("result1"); 
var buildingData = Session.get("result2"); 

Server Side

Meteor.methods({ 
    'parseFile'() { 
    var csv = Assets.getText('buildingData.csv'); 
    var rows = Papa.parse(csv).data; 
    return rows; 
    } 
}) 

Das Problem ist, während ich einen Anruf es braucht Zeit, machen das Ergebnis zurück und damit zu schicken, wo i verwende Breite und Länge, geben undefined und Seitenumbrüche. Also, gibt es eine Lösung, um dieses Problem zu vermeiden. Eine der Lösungen kann sein, einen synchronen Aufruf zu machen und darauf zu warten, dass das Ergebnis zurückgegeben wird.

+1

„Einer der Lösung kann einen synchronen Anruf zu“, auf dem Client nicht, nein. Sie können keine synchronen Aufrufe auf dem Client ausführen. Sie müssen Ihre Seite dafür stabil machen. Ich würde vorschlagen, eine "Lade-Seite" zu implementieren, die wartet, bis die Sitzungsvariablen erst gesetzt werden, dann rendern Sie die Seite, die gerade bricht. –

Antwort

0

können Sie die Server-Methode synchron laufen zu lassen, die futures package mit, die der Kunde für das Verfahren abzuschließen, warten zwingen sollte.

Es könnte wie folgt aussehen:

Meteor.methods({ 
    'parseFile'() { 
    var future = new Future(); 
    var csv = Assets.getText('buildingData.csv'); 
    var rows = Papa.parse(csv).data; 
    future.return(rows); 
    future.wait(); 
    } 
}); 

Dies würde Sie benötigen den Futures-Paket oben verlinkte der Installation und Einrichtung enthält richtig in Datei Ihre Meteor.methods() Definitionen enthält. Sie können auch in Ihrer Methode auf eine gute Fehlerbehandlung achten.

UPDATE: Die Verbindung zum Paket Zukunft ist ein NPM-Paket, das Sie über here lesen können. Der obige Link bezieht sich auf das Atmosphärenpaket, das wie ein altes Wrapper-Paket aussieht.

+0

Ist "Futures" Paket npm oder Atmosphäre? – Optymystyc

+0

Es ist ein NPM-Paket. Ein Update mit dem Link zur NPM-Version hinzugefügt. – NFab

Verwandte Themen