不断呼叫/返回Meteor.method

时间:2015-07-06 20:56:18

标签: javascript meteor

我有600个网址的列表,我想将请求循环到。

当我收到它时,console.log每个人的内容是否可能,而不是等待600完成然后将其全部返回为1?

很抱歉,如果这看起来有点模糊,不确定用正确的术语来描述这个。

  Meteor.methods({
    getNations: function () {
      this.unblock();

      var result = Meteor.http.get('https://www.easports.com/uk/fifa/ultimate-team/api/fut/item?jsonParamObject=%7B%22page%22:1%7D');

      var totalPages = JSON.parse(result.content).totalPages;

      for (var i = 1; i < totalPages; i++) {
        try {
          var page = Meteor.http.get('https://www.easports.com/uk/fifa/ultimate-team/api/fut/item?jsonParamObject=%7B%22page%22:' + i + '%7D');

          console.log(JSON.parse(page.content));
        } catch(e) {
          console.log('Cannot get page', e);
        }
      }

      return result;
    }
  })

1 个答案:

答案 0 :(得分:1)

这将获取所有页面,将它们插入到集合中并使其在客户端上可用。但有几点需要注意。如果多次调用该方法,您将在数据库中获得重复项,不确定这是否是您的意图。此外,错误记录只发生在服务器上,永远不会显示给客户端,不知道这是否是你想要的。请注意,第二个Meteor.http.get会传递回调,使其成为run async

# Shared code
Nations = new Mongo.Collection('nations')

# Server

Meteor.methods({
  getNations: function () {
    this.unblock();

    var result = Meteor.http.get('https://www.easports.com/uk/fifa/ultimate-team/api/fut/item?jsonParamObject=%7B%22page%22:1%7D');

    var totalPages = JSON.parse(result.content).totalPages;

    var callback = function(err, page) {
      if (err) 
        console.log('Cannot get page', e);
      else
        Nations.insert(page);
    }
    for (var i = 1; i < totalPages; i++) {
      Meteor.http.get('https://www.easports.com/uk/fifa/ultimate-team/api/fut/item?jsonParamObject=%7B%22page%22:' + i + '%7D', callback);
    }

    return result;
  }
});

Meteor.publish('nations', function() {
  return Nations.find();
});

# Client
Meteor.subscribe('nations');