Показать сообщение отдельно
  #2 (permalink)  
Старый 16.05.2021, 19:56
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Эти операции асинхронны. Функция из onload вообще не должна возвращать никакого значения. Она выполняется, когда получен ответ от сервера, а функция toCart к этому времени давно завершится. Такие вещи надо делать через Promise/aync-await
Например, так

// первая (~ajax)
function toCart(e) {
  return new Promise ((fresolve) => { // Возвращаем обещание
  var req = new XMLHttpRequest();  
  ....
  req.onload = function() {
      let res = this.response;
      console.log(res); // 
      fresolve ( res); //  Обещение разрешится, когда придет ответ от сервера значением res
  }
   })
}
// вторая
async function btnClick(e) {
...
  let res = await toCart([name, size]); // ждем, когда обещание разрешится, получаем ответ
  console.log(res); 
}

Последний раз редактировалось voraa, 16.05.2021 в 20:00.
Ответить с цитированием