2015-08-28 85 views
0

我试图通过解析后台作业添加多条记录。我没有收到任何错误,只是在21条记录后停止保存记录。这里是我的代码:解析后台作业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]页工作数量:100 I2015-08-28T10:50:31.442Z] v15:冉:50 50 50 50 50 jobs jobs jobs jobs jobs jobs jobs jobs jobs jobs jobs jobs jobs jobs v v v v v v v v v job usagovJobsRunner with:输入: {}结果:undefined

+1

不要混淆承诺与传统的回调,选择一种风格并坚持下去。只有当一切都完成时调用'status.success();'。 – Wain

+0

@Wain removed last status.success();工作。我还有一个问题,我不知道githhub的最大页数是否对此有任何建议。 – Attiqe

回答

0

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

对于调用任意页面深度,您应该创建一个普通的JS函数,它需要一个页面编号并返回一个由页面数据和页面编号完成的承诺。现在,你可以调用这个函数,当它完成时,你可以检查是否需要加载另一个页面,并且你也知道页面号码是什么。当你到达最后,你可以拨打status.success()