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 请求移至 Meteor.Method 吗?

4

1 回答 1

2

在客户端,您没有光纤模块,因此无法同步调用函数。一种解决方案可能是使用 Session,因为它具有反应性。您只需设置一个默认值,并在您的辅助函数中使用它

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

如果您不想使用 a ,您可以使用该模块Session实现自己的反应机制。Deps例如,在Meteor.http.get回调中,您可以设置Template.templateName属性并使上下文对象无效,以便重新运行辅助函数。但是 Session 肯定更容易;-)

于 2013-06-23T02:10:36.273 回答