Задать вопрос
nastya97core
@nastya97core
Начинающий программист

Как в return получить несколько значений?

Здравствуйте. Есть две функции. Одна делает запрос на сервер и возвращает json, а вторая как раз вызывает первую функцию с нужными аргументами. Результат первой (~ajax) функции я хочу обрабатывать во второй, поэтому первая функция должна возвращать просто ответ сервера. Но почему-то в 1-ой функции всё нормально отображается, но когда я делаю return, то вторая функция распознать ничего не может.
// первая (~ajax)
function toCart(e) {
  var req = new XMLHttpRequest();
  ....
  req.onload = function() {
      let res = this.response;
      console.log(res); // {result: ok, count: 3}, а console.log(res.result) вернёт ok
      return res; // {res.result,res.count} - тоже не работает
  }
}
// вторая
function btnClick(e) {
...
  let res = toCart([name, size]);
  console.log(res); // undefined
}

Если же я сделаю в первой функции return res.result, то во второй я его получу (ok), но мне же нужно оба условия.

Что я делаю не так?
  • Вопрос задан
  • 313 просмотров
Подписаться 1 Простой 22 комментария
Решение пользователя vdem К ответам на вопрос (3)
@vdem
toCart() судя по всему не возвращает ничего. Результат возвращает анонимная функция, которую Вы присваиваете свойству onload, и он нигде не используется. В btnClick() Вы вызываете функцию toCart(), которая в свою очередь инициирует асинхронный запрос, ответ на который придет в ту анонимную функцию.

UPD: Вот такой вариант будет работать:
function toCart(e, handleResponse) {
    const req = new XMLHttpRequest();
    ...
    req.onload = function() {
        handleResponse(this.response);
    }
}

function btnClick(e) {
    ...
    toCart([name, size], function(response) {
        console.log(response);
    });
}
Ответ написан
Комментировать