Azure Функция приложения ETIMEDOUT error работает иногда, но не работает - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть следующий код:

var request = require('request');
var rp = require('request-promise');
module.exports = async function(context, req) {
    var arr = [[url1],[url2]]
    for (i = 0; i < arr.length; i++) {
        func(context, arr[i]);
    }
}
function func(context, urls) {
    const promises = urls.map(item => {
        return rp({
            uri: item,
            simple: false,
            resolveWithFullResponse: true
        }).then(response => {
            if (response.statusCode == 403) {

                var msg = "hello";
                return msg;
            } else {
                return null;
            }
        });
    });

    return Promise.all(promises).then(data => {
        // remove null results from array
        return data.filter(item => item !== null);
    });
}

И я продолжаю получать эту ошибку. Иногда это работает, иногда нет. Как я могу это исправить, и почему это иногда работает, а иногда нет.

Result: Failure
Exception: RequestError: Error: connect ETIMEDOUT 

Нужно ли включать параметр pool? Или, может быть, timeout? Кажется, ошибка связана с размером arr.

1 Ответ

0 голосов
/ 19 февраля 2020

Это проблема на сетевом уровне, которая, скорее всего, связана с вашей конфигурацией прокси. Также вы можете получить эту ошибку при запросе к серверу, использующему https (порт 443), у которого нет действующего сертификата. Таким образом, использование следующей конфигурации может решить вашу проблему.

return rp({
       uri: item,
       simple: false,
       resolveWithFullResponse: true,
       proxy: 'http://<your.proxy.info>:8080',
       strictSSL :false
})

Обновление:

Нет прокси, нет потоковой передачи, только один запрос, который запускается несколько асин c запрос, установка этой опции:

agent: false, pool: {maxSockets: 8} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...