Я хотел бы установить более высокое значение тайм-аута или удалить тайм-аут из моего асинхронного дайджест-запроса node.js - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь сделать запрос, который имеет довольно большое вложение и, следовательно, займет немного времени, однако я получаю ошибку Server timeout waiting for the HTTP request from the client.. Установка значения времени ожидания в параметрах соединения не сработала (при условии, что это происходит из-за асинхронного вызова).

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

const RequestDigest = require('request-digest');
const dc = RequestDigest(adminUser, adminPass);

let ocRequest = (url, opts) => {
  opts = opts || {};
  return new Promise((resolve, reject) => {
    let connOptions = {
      host: host,
      path: url,
      port: protoPort,
      method: opts.method || 'GET',
      timeout: 1200000,
      headers: {
        "User-Agent": "Node fallback CA",
        "Connection": "keep-alive",
        "X-Requested-Auth": 'Digest'
      }
    }

    if (opts.form) {
      connOptions.formData = opts.form;
    }

    let req = dc.requestAsync(connOptions)
               .then(res => {
                 try {
                   return resolve(JSON.parse(res.body));
                 } catch(e) {
                   return resolve(res.body);
                 }
                 resolve(res.body);
               })
               .catch(err => {
                 reject(err)
               });
  });
};

Какой правильный путьустановить высокое значение тайм-аута или попросить запрос дождаться ответа? Спасибо.

1 Ответ

0 голосов
/ 30 сентября 2019

Вы можете использовать запрос или, в частности, request-promise. Это может помочь объяснить, как вы можете использовать асинхронный результат.

let request = require('request-promise')
let request_options = {
   url : 'http://...',
   timeout : 30000 //30 seconds
};

doRequest(request_options)
    .then(result => result)
    .catch(e => console.error(e))


function doRequest(options){
    return request(options)
      .then(result => {
          try { return JSON.parse(result) }
          catch(e) {return Promise.reject({code : 500, message : 'bad json'})}
        })
      .catch(e => return Promise.reject( e.code + ' happened : ' + e.message))
}
...