1

我正在尝试运行一个简单的脚本,该脚本将使用 X 射线刮取一些数据并将其插入到我的事件集合中。

    if (Meteor.isServer) {
      var Xray = Meteor.npmRequire('x-ray');
      var xray = new Xray({
        version: "2.0.3"
      });

      xray('http://www.events12.com/seattle/january/', '.qq', [{
        title: '.title',
        date: '.date',
        link: 'a @href',
        allContent: '@html'
      }])(function(err, content) {

        for (var i = 0; i < content.length; i++) {
          (function() {

            console.log(i);

            var newEvent = {
              owner: 'me',
              name: content[i].title,
              date: content[i].date,
              url: content[i].link,
              createdAt: new Date(),
              description: 'none'
            };

            console.log(newEvent);

            Events.insert(newEvent, function(err, data) {
                console.log(err);
                console.log(data);
            });


          })();
        }
      });
    }

接收内容的 X 射线回调将所有抓取的数据放在一个对象数组中,每个对象都有几个属性。当我尝试将此数据插入到我的事件集合中时,for 循环迭代一次然后退出,但没有显示错误。如果我删除Events.insert()循环一直迭代。

我错过了什么?执行此类任务的正确方法是什么?

4

1 回答 1

0

Events.insert()在任何 Meteor 光纤之外被调用。添加Meteor.bindEnvironment()和提供整个函数作为回调解决了这个问题。

于 2016-01-26T05:41:12.857 回答