Функция JavaScript случайным образом возвращает undefined, если внутри оператора If [duplicate]

Краткий ответ: ваш метод foo() возвращается немедленно, а вызов $ajax() выполняется асинхронно после возврата функции . Проблема заключается в том, как и где сохранить результаты, полученные при вызове async, после его возврата.

В этом потоке было задано несколько решений. Возможно, самый простой способ - передать объект методу foo() и сохранить результаты в члене этого объекта после завершения асинхронного вызова.

function foo(result) {
    $.ajax({
        url: '...',
        success: function(response) {
            result.response = response;   // Store the async result
        }
    });
}

var result = { response: null };   // Object to hold the async result
foo(result);                       // Returns before the async completes

Обратите внимание, что вызов foo() ] все равно не вернут ничего полезного. Однако результат асинхронного вызова теперь будет сохранен в result.response.

-1
задан Andrew 29 December 2014 в 16:24
поделиться

2 ответа

Вы не используете возвращаемое значение рекурсивного вызова. Вам нужно сделать:

return load_price();
5
ответ дан Barmar 23 August 2018 в 22:29
поделиться

Кто говорил вам об использовании рекурсии для этой проблемы?

#undef max
double load_price()
{
   for(;;) {
      double price;
      cin >> price;
      if (!cin)
      {
         cin.clear();
         std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
         cout << endl;
         cout << "You didn't enter a number. Do so, please: ";
         continue;
      }
      if (!Goods().set_price(price))
      {
         cout << endl;
         cout << "The price " << red << "must not" << white << " be negative." << endl;
         cout << "Please, insert a new price: ";
         continue;
      }
      return price;
   }
}
1
ответ дан Hans Klünder 23 August 2018 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: