解析后台作业在21条记录后添加多个记录停止

时间:2015-08-28 10:59:47

标签: parse-platform

我正在尝试通过Parse后台作业添加多个记录。我没有收到任何错误,它只是在21条记录后停止保存记录。这是我的代码:

var _ = require('underscore');

Parse.Cloud.job('usagovJobsRunner', function (request, status) {
  var promises = [];
  for (var index = 0; index < 2; index++) {
    promises.push(Parse.Cloud.httpRequest({
      url: 'http://jobs.github.com/positions.json',
      followRedirects: true,
      params: {
        page: index
      }
    }));
  }

  var jobs = [];
  Parse.Promise.when(promises).then(function () {

    console.log('arguments length: ' + arguments.length);

    _.each(arguments, function (page) {
      console.log('page lenght: ' + page.data.length);

      _.each(page.data, function (job) {
        var model = new (Parse.Object.extend('Jobs'));
        model.set({
          jobId: job.id,
          title: job.title,
          description: job.description,
          location: job.location,
          jobPosting: new Date(job.created_at),
          type: job.type,
          company: job.company,
          companyUrl: job.company_url,
          companyLogoUrl: job.company_logo,
          source: 'Github Jobs',
          jobUrl: job.url
        });
        jobs.push(model)
      });
    });

    console.log('jobs count: ' + jobs.length);

    Parse.Cloud.useMasterKey();
    // save all the newly created objects
    Parse.Object.saveAll(jobs, {
      success: function (objs) {
        // objects have been saved...
        console.log('jobs saved.');
        status.success('Github Jobs runner successfully loaded ' + objs.length + ' jobs');
      },
      error: function (error) { 
        // an error occurred...
        console.log(error);
        status.error('Error: ' + error);
      }
    });


    status.success();
  }, function (err) {
    console.log(err);
    status.error(err);
  });

});

以下是我的日志:

  

I2015-08-28T10:50:31.327Z]参数长度:2   I2015-08-28T10:50:31.328Z]页面长度:50   I2015-08-28T10:50:31.363Z]页面长度:50   I2015-08-28T10:50:31.404Z]工作次数:100   I2015-08-28T10:50:31.442Z] v15:Ran job usagovJobsRunner with:输入:   {}结果:未定义

1 个答案:

答案 0 :(得分:0)

不要将承诺与传统的回调混合,选择一种风格并坚持下去。一切都完成后,只调用一次status.success();

为了调用任意页面深度,你应该创建一个普通的JS函数,它接受一个页码并返回一个用页面数据和页码完成的promise。现在,您可以调用该功能,当它完成后,您可以检查是否需要加载另一个页面,并且您还知道页码是什么。当你到达终点时,你可以致电status.success()