1

リクエストからタイムアウトまたはデータが返されるまで、隕石ヘルパーがすぐに返されないようにする必要がありますMeteor.http.get(url, ...)。例えば、

Meteor.templateName.helpers ({
    testHelper: function()
         {
          var ss = "doesnt wait";
               Meteor.http.get("http://api.somesite.com",
                    function (error, result) {
                        if(!error){
                           if(result.statusCode === 200) {
                              var respJson = JSON.parse(result.content);
                              console.log(respJson);
                              ss =  "should have this value";
                          }
                      }
                  });

               return ss;
          }

     })

ブロッキング呼び出しではMeteor.httpありません。get リクエストがデータを返すまでヘルパー メソッドを停止するにはどうすればよいですか。get リクエストを Meteor.Method に移動する必要がありますか?

4

1 に答える 1

2

クライアントにはファイバーモジュールがありません。その結果、関数への同期呼び出しを行うことができません。1 つの解決策は、その反応性のためにセッションを使用することです。デフォルト値を設定し、それをヘルパー関数で使用するだけです

Session.setDefault('testHelper', {msg: 'wait'})
Meteor.templateName.helpers ({
    testHelper: function() {
        return Session.get('testHelper');
    }
});

次に、必要なたびにこのセッションを更新します。

Template.templateName.rendered = function () {
    Meteor.http.get("http://api.somesite.com",
        function (error, result) {
            if(!error && result.statusCode === 200){
                var respJson = JSON.parse(result.content);
                Session.set('testHelper', respJson)
            }
        }
    );
}

を使用したくない場合はSession、モジュールを使用して独自の反応メカニズムを実装できDepsます。たとえば、Meteor.http.getコールバックでTemplate.templateName属性を設定し、ヘルパー関数を再実行するためにコンテキスト オブジェクトを無効にすることができます。しかし、セッションは間違いなくより簡単です;-)

于 2013-06-23T02:10:36.273 に答える