2016-09-06 94 views
0

我是流星的新手。我正在使用以下代碼來讀取存儲在服務器上的文件。流星同步和異步調用讀取文件

客戶端

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

服務器端

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

的問題是,我給它需要時間來將結果發送回,因此只要我一個電話我使用緯度和經度給它未定義和分頁符。那麼,是否有解決方案來避免這個問題。其中一個解決方案可以是進行同步調用並等待結果返回。

+1

「一個解決方案可以使同步調用」,而不是在客戶端上,沒有。你不能在客戶端上進行同步調用,你需要使你的頁面健壯。我會建議實現一個「加載頁面」,等待直到會話變量設置爲只顯示那個頁面中斷的那個頁面。 –

回答

0

可以使服務器運行的方法同步使用futures package,應強制客戶端等待的方法來完成。

它可能是這個樣子:

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

這就要求你安裝包期貨上面和設置包括在適當的包含您Meteor.methods()定義文件鏈接。您也可以在您的方法內查看良好的錯誤處理。

更新: 指向Future包的鏈接是NPM包,您可以閱讀關於here的鏈接。上面的鏈接是氣氛包,看起來像一箇舊的包裝包。

+0

是「期貨」套餐npm還是大氣? – Optymystyc

+0

這是一個NPM包。通過鏈接到NPM版本添加了更新。 – NFab