Ошибка: сокет зависает в Http-запросе, сделанном в Node JS с использованием запроса-обещания, вызывающего перезапуск цикла - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь сделать Http-запрос, используя запрос-обещание внутри цикла for.Но кажется, что если запрос Http занимает много времени, запрос-обещание закрывает соединение.

Это нормально, но я не могу понять, что цикл for снова начинается с 0 после вывода ошибки.

Ниже приведен код

const rp = require('request-promise');
async function stepIterator(processingSteps, documentId) {
    var finalResult = null;
    for (var step = 0, len = processingSteps.length; step < len; step++) {
        if (step === 0 || step === 1 || step == 2 || step == 3) {
            try {
                console.log('Calling step ', step);
                let url = 'http://internal-server:8080/process';
                let collection = getCollection(documentId);
                let splitText = getSPlit(documentId);
                let outputFormat = 'xmi';
                let documentObject = await callServer(url, collection, splitText, outputFormat);
                finalResult = documentObject;
            } catch (error) {
                console.log("Error");
            }
        }
    }
    return finalResult;
}

async function callServer(url, collection, splitText, outputFormat) {
    var options = {
        method: 'POST',
        uri: url,
        headers: {
            'Content-Type': 'multipart/form-data',
            'Cache-Control': 'no-cache',
            'Connection': 'keep-alive '
        },
        formData: {
            collection: collection,
            text: splitText,
            output: outputFormat
        }
    };
    return rp(options)
} 

Полная трассировка ошибки выглядит следующим образом

{ RequestError: Error: socket hang up at new RequestError (D:\New_Projects\new-data-access-layer\node_modules\request-promise-core\lib\errors.js:14:15) at Request.plumbing.callback (D:\New_Projects\new-data-access-layer\node_modules\request-promise-core\lib\plumbing.js:87:29) at Request.RP$callback [as _callback] (D:\New_Projects\new-data-access-layer\node_modules\request-promise-core\lib\plumbing.js:46:31) at self.callback (D:\New_Projects\new-data-access-layer\node_modules\request\request.js:185:22) at Request.emit (events.js:182:13) at Request.onRequestError (D:\New_Projects\new-data-access-layer\node_modules\request\request.js:881:8) at ClientRequest.emit (events.js:182:13) at Socket.socketOnEnd (_http_client.js:425:9) at Socket.emit (events.js:187:15) at endReadableNT (_stream_readable.js:1094:12) at process._tickCallback (internal/process/next_tick.js:63:19) name: 'RequestError', message: 'Error: socket hang up', cause:<br> { Error: socket hang up at createHangUpError (_http_client.js:322:15) at Socket.socketOnEnd (_http_client.js:425:23) at Socket.emit (events.js:187:15) at endReadableNT (_stream_readable.js:1094:12) at process._tickCallback (internal/process/next_tick.js:63:19) code: 'ECONNRESET' }, error: { Error: socket hang up at createHangUpError (_http_client.js:322:15) at Socket.socketOnEnd (_http_client.js:425:23) at Socket.emit (events.js:187:15) at endReadableNT (_stream_readable.js:1094:12) at process._tickCallback (internal/process/next_tick.js:63:19) code: 'ECONNRESET' }, options: { method: 'POST', uri: 'http://internal-server:8080/process', json: true, headers: { Connection: 'keep-alive ' }, body: { docSplitId: [Array], _id: 5c579d84812acb17ec74ac39, contentType: 'application/pdf', location: 'C:\\Users\\newuser\\AppData\\Local\\Temp\\2\\report.pdf', docModelVersion: '1', visualMetaDataId: null, categoryId: '5c52a72f6df294140c0535bc', deductedInfo: null, status: 'New', isDeleted: false, metadata: [Object], detailedStatus: [Array] }, callback: [Function: RP$callback], transform: undefined, simple: true, resolveWithFullResponse: false, transform2xxOnly: false }, response: undefined }

...