Проблема в вашем $.post('/token'...
в логах c. js. Проблема здесь в том, что ajax является асинхронным c, а это означает, что код JS продолжает выполняться.
Вот почему apiKey = sessionStorage.getItem('token');
не успеет получить значение при первом переходе на страницу, потому что ваш ajax не завершил sh свою работу.
Я думаю, что использование asyn c false в $ .post и $. ajax устарело, и потому что большая часть вашего приложения logi c зависит от этого apiKey, я бы поместил в ваш $.post...
каждый .click
, который использует apiKey.
Решение 2
Я не хотел писать вам концепцию async / await и запутать вас, но вы можете сделать что-то вроде этого
1) add asyn c -> сообщает, что ваша функция является asyn c, и вам это нужно, чтобы вы могли ждать обещания с ответом from ajax
$(document).ready(async () => {
2) await for ajax to fini sh
var token = await $.post('/token').then();
Затем вы можете установить в sessionStorage или установить его переменную и использовать.