Преобразование статического узла, js-запроса в итеративный пакет, чтобы избежать ограничения API - PullRequest
0 голосов
/ 04 октября 2018

TL; DR - я не разработчик и мне нужна помощь в устранении ошибки. Я получаю код ниже

Обновление: у меня есть некоторый рабочий код, но я получаю с перебоямиошибка в коде Visual Studio для необработанного отклонения обещания, и я не уверен почему.Иногда код работает нормально, в других случаях я получаю сообщение об ошибке в первом блоке кода

Response server [ny-front-api31] session [384923350]: 
{"code":"INTERNAL_SERVERL_ERROR","message":"Internal server error 
occurred","objectType":"KalturaAPIException","args":[]}    
(node:34340) UnhandledPromiseRejectionWarning: #<Object>
(node:34340) UnhandledPromiseRejectionWarning: Unhandled promise rejection. 
This error originated either by throwing inside of an async function without 
a catch block, or by rejecting a promise which was not handled with 
.catch(). (rejection id: 1)
(node:34340) [DEP0018] DeprecationWarning: Unhandled promise rejections are 
deprecated. In the future, promise rejections that are not handled will 
terminate the Node.js process with a non-zero exit code.

Вот код, который я запускаю:

const kaltura = require('kaltura-client');
const sql = require('./UserEngagementSQL');
const moment = require('moment');

const config = new kaltura.Configuration();
config.serviceUrl = 'https://www.kaltura.com';
const client = new kaltura.Client(config);

function process(pageIndex, start, end) {
    return new Promise(function (resolve, reject) {
        kaltura.services.session.start(
            "omitted",
            "omitted",
            kaltura.enums.SessionType.ADMIN,
            omitted)
            .completion((success, ks) => {
                if (!success) throw new Error(ks.message);
                client.setKs(ks);
                let reportType = kaltura.enums.ReportType.USER_ENGAGEMENT;
                let reportInputFilter = new kaltura.objects.EndUserReportInputFilter();
                reportInputFilter.fromDay = start;
                reportInputFilter.toDay = end;
                let pager = new kaltura.objects.FilterPager();
                pager.pageIndex = pageIndex;
                pager.pageSize = 500;
                let order = "";
                let objectIds = "";

                kaltura.services.report.getTable(reportType, reportInputFilter, pager, order, objectIds)
                    .execute(client)
                    .then(async result => {
                        if (result.data){
                            const data = result.data.split(';');
                            for (var i = 0; i < data.length; i++) {
                                const row = data[i].split(',');
                                if (row[0].length > 0) {
                                    await sql.insert(row);
                                }
                            }
                            resolve(data.length);
                        }else{
                            resolve(0);
                        } 
                    });

            })
            .execute(client);
    });
}

async function main() {
    const initDate = moment('08/01/2018');
    const startDate = initDate.format('YYYYMMDD');
    const endDate = moment(startDate).add(30, 'day').format('YYYYMMDD');
    let startingIndex = 1;

    //console.log(startDate, endDate);
    let shouldRun = true;
    while(shouldRun){
        let processed =  await process(startingIndex++, startDate, endDate);
        console.log('Number of processed records ' + processed);
        shouldRun = processed > 0;
        console.log('Processing page ' + startingIndex + ' Should Keep running ' + shouldRun);
    }
}

main();

Исходное сообщение: I 'Я работаю с Kaltura API, и у них есть довольно неплохие запросы консоли для начинающих, которые почти как то, что мне нужно как не-разработчику, чтобы получить данные, которые мне нужны.Мне нужен был приведенный ниже код, чтобы можно было получить все записи за определенный диапазон дат.У меня есть ограничение в 10000 записей на звонок, поэтому мне нужно было пройти через запрос и постоянно проверять записи

...