2016-09-05 4 views
0

以下のコードでは、resはサーバによって返される.csvデータを管理する2次元配列です。私は、コードの上に使用しています関数スコープの外側でMethod.callから返された値を使用するメテオ

var result; 
Meteor.call('parseFile', (err, res) => { 
    if (err) { 
     alert(err); 
    } else { 
     // success! 
     alert(res[0][0]); 
     result = res 
    } 
}); 
let longitude = result[0]; 

。結果変数に格納されている値はnullです。ただし、alertでは変数resに値が格納されています。私はオンラインで検索し、彼らはこれがいくつかのファイバーのものであると言って、セッション変数を使用することをお勧めします。しかし、私は正しいことも得られません。だから、私の質問は基本的にどのように関数の範囲外で使用するres変数に格納されているサーバーによって返された配列を使用することです。

答えて

0

これは古典的な非同期呼び出しの問題です。参照:How do I return the response from an asynchronous call?

通常の方法は、そのタスクのコールバックの内側にあなたの非同期タスクの結果(のようなlet longitude = result[0])に依存どんな指示を配置することです。

流星クライアントコードの中で、あなたはまた、例えばブレイズヘルパー内(反応範囲であなたの指示を書き込み、またはTracker.autorun() /ブレイズテンプレートthis.autorun()を使用して、あなたのresultためReactive Variableを使用することができます。そのように、それはセットを取得した後あなたのMeteor.call()によって、あなたの反応範囲が再実行されます、今回更新された値を使用して。

+0

を追加し、私は流星に非常に新しいです、私はあなたが..あなたは、私がすべき変更内容を教えてもらえ何を言っているか理解していませんコードに挿入します。 –

+0

古典的なアプローチを最初に試してください(リンク先の記事を参照してください) – ghybs

+0

私はそれがajaxに関連していることを読んでおり、関数の範囲からアクセスする方法も書いてありません。私はあなたがアイデアを得ることができるように、このリンクhttps://forums.meteor.com/t/how-to-return-value-on-meteor-call-in-client/1277を読むことができると思います。 –

0

は、htmlファイルに以下の例 を参照してください、この目的のために反応性の変数を使用する必要がありますropriateは、JSファイルに

<template name="test"> 
    <!-- Here is where you want your data --> 
    <p>{{test}}</p> 
</template> 

を変更し、以下の

Template.test.onCreated(function() { 

    this.test= new ReactiveVar(); 

    Meteor.call('parseFile', (err, res) => { 
    if (err) { 
     console.error(err); 
    } else { 
     // Set data into a reactive variable 
     this.test.set(res); 
    } 
    }); 
}); 

Template.test.helpers({ 
    test: function() { 
    // Helper will automatically rerun on method res 
    return Template.instance().test.get(); 
    } 
}); 
関連する問題