我正在尝试通过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:输入: {}结果:未定义
答案 0 :(得分:0)
不要将承诺与传统的回调混合,选择一种风格并坚持下去。一切都完成后,只调用一次status.success();
。
为了调用任意页面深度,你应该创建一个普通的JS函数,它接受一个页码并返回一个用页面数据和页码完成的promise。现在,您可以调用该功能,当它完成后,您可以检查是否需要加载另一个页面,并且您还知道页码是什么。当你到达终点时,你可以致电status.success()