簡體   English   中英

不斷調用/返回Meteor.method

[英]Constantly call / return a Meteor.method

我有一個600 url的列表,我想遍歷請求。

是否有可能在我收到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;
    }
  })

這將獲取所有頁面,將它們插入到集合中,並使它們在客戶端上可用。 雖然有一些警告。 如果多次調用該方法,您將在數據庫中獲得重復項,請不確定這是否是您想要的。 此外,錯誤日志僅在服務器上發生,並且永遠不會顯示給客戶端,也不知道這是否是您想要的。 請注意,第二個Meteor.http.get傳遞了一個回調,使它運行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');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM