2015-08-28 45 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()

相關問題