нет возврата из функции Javascript - PullRequest
0 голосов
/ 09 января 2020

Я написал этот скрипт на основе информации, которую я прочитал здесь, в стеке. Он вызывает данные из API и должен конвертировать направленные градусы в кардинальные. Когда я запускаю его, я не получаю вывод. Там нет ошибки, когда я проверяю страницу. Я не нашел синтаксических ошибок при запуске через Fiddle.

Я подумал, что могу просто заменить число (я пробовал 45) на num и заставить скрипт работать безрезультатно, чтобы я мог использовать глаз эксперта. Спасибо.

var settings = {
  "url": "https://api.stormglass.io/v1/weather/point?lat=40.370181&lng=-73.934193&key=...",
  "method": "GET",
  "timeout": 0,
};

$.ajax(settings)
.fail(function(a,b,c) { console.log(a.responseJSON) })
.done(function(response) {
  console.log(response);

  variconwndr24 = function degToCompass(num) {
    var num = response.hours[17].windDirection[1].value;;
    while (num < 0) num += 360;
    while (num >= 360) num -= 360;
    val = Math.round((num - 11.25) / 22.5);
    arr = ["N", "NNE", "NE", "ENE", "E", "ESE", "SE",
      "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"
    ];
    return arr[Math.abs(val)];
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Прежде всего, попробуйте что-то вроде этого:

var settings = {
  "url": "https://api.stormglass.io/v1/weather/point?lat=40.370181&lng=-73.934193&key=xdvfd",
  "method": "GET",
  "timeout": 0,
};

$.ajax(settings).done(function(response) {
  console.log(response);
  var degrees = response.hours[17].windDirection[1].value;
  variconwndr24 = degToCompass(degrees);
  console.log(variconwndr24);
  return variconwndr24;
});

function degToCompass(num) {
    while (num < 0) num += 360;
    while (num >= 360) num -= 360;
    val = Math.round((num - 11.25) / 22.5);
    arr = ["N", "NNE", "NE", "ENE", "E", "ESE", "SE",
      "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"
    ];
    console.log(arr[Math.abs(val)]);
    return arr[Math.abs(val)];
  }

В том виде, как вы это сделали, degToCompass фактически никогда не вызывается, а аргумент num становится избыточным, потому что вы немедленно переопределяете его.

0 голосов
/ 09 января 2020

Основная проблема в функции обратного вызова для done. Вы определяете функцию degToCompass, но эта функция никогда не вызывается. Кроме того, вы переопределяете параметр для функции, которую вы передали. Нет смысла передавать num в качестве параметра, если вы просто перезаписываете его. Вместо этого просто передайте желаемое значение ответа в качестве параметра. Кроме того, для удобства чтения попробуйте разбить это следующим образом:

const arr = [
  "N", 
  "NNE", 
  "NE", 
  "ENE", 
  "E", 
  "ESE", 
  "SE",
  "SSE", 
  "S", 
  "SSW", 
  "SW", 
  "WSW", 
  "W", 
  "WNW", 
  "NW", 
  "NNW"
];

var settings = 
{
  "url": "https://api.stormglass.io/v1/weather/point?lat=40.370181&lng=-73.934193&key=...",
  "method": "GET",
  "timeout": 0,
};

function degToCompass(num) 
{
    while (num < 0) 
    {
      num += 360;
    }
      
    while (num >= 360) 
    {
      num -= 360;
    }

    val = Math.round((num - 11.25) / 22.5);
    return arr[Math.abs(val)];
}

function faiureCallback(a, b, c)
{
    console.log(a.responseJSON);
}

function doneCallback(response)
{
  // Do some stuff
  var num = response.hours[17].windDirection[1].value;;
  return degToCompass(num)
}

$.ajax(settings)
  .fail(faiureCallback)
  .done(doneCallback);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...