Лямбда-функция не выполняет часть кода, ничего не возвращая - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь заставить функцию возвращать правильные значения другой функции, которая обрабатывает возвращенные данные. У меня есть эта функция внутри того же файла, что и тот, из которого я пытаюсь ее вызвать - лямбда-функция - я вызываю ее, используя const response = sendRequest(url), URL-адрес которого предоставляется из другой переменной. Я проверил эту переменную, и я определенно установил правильное значение.

Цель состоит в том, чтобы вернуть информацию о запросе обратно в основную функцию. Я хочу обработать там данные и действовать в соответствии с ними.

Фактическая функция запроса должна быть в порядке, поскольку я могу запустить ее точно так, как она есть - за вычетом части разрешения - в файле test.js.

Проблемы c функция

async function sendRequest (url) {
  let code;
  return new Promise((resolve, reject) => {
    request({ url, timeout: 20000 }, (error, response, body) => {
      if (error == 'ENOTFOUND' || error == 'ETIMEDOUT') {
        response.statusCode = 500;
      }
      if (error || (response.statusCode < 200 && response.statusCode > 299) || !response.statusCode) {
        if (!response || !response.statusCode) {
          code = 500;
        } else {
          code = response.statusCode;
        }
      }
      console.log(`Elapsed time: ${response.elapsedTime}`)
      return resolve({code, error, elapsedTime: response.elapsedTime})
    });
  });
}

Токовый выход

{error: null}

1 Ответ

0 голосов
/ 19 июня 2020
const axios = require('axios');

async function sendRequest(url) {
  let code;
  const start = new Date();
  return axios
    .get(url, { timeout: 2000 })
    .then((response) => {
      const elapsedTime = new Date() - start;
      return { code: response.status, error: null, elapsedTime };
    })
    .catch((error) => {
      const elapsedTime = new Date() - start;
      if (error.request.aborted) code = 408;

      return {
        code: code ? code : error.response ? error.response.status : 500,
        error: error.response ? error.response.statusText : error.code,
        elapsedTime,
      };
    });
}

async function main() {
  const response1 = await sendRequest('http://google.com/');
  console.log(response1); // prints { code: 200, error: null, elapsedTime: 97 }

  const response2 = await sendRequest('http://google.com/asdasd');
  console.log(response2); // prints { code: 404, error: 'Not Found', elapsedTime: 48 }

  const response3 = await sendRequest('http://google.comcom');
  console.log(response3); // prints { code: 500, error: 'ENOTFOUND', elapsedTime: 66 }

  // and on timeout it returns { code: 408, error: 'ECONNABORTED', elapsedTime: 44 }

}

main();
...