Ошибка Uncaught TypeError: Cannot read property 'getPlayer' of undefined

Почему происходит эта ошибка ?

<script type="text/javascript">
  var player;
  var sdk;
  var ysdk;

  YaGames.init().then(ysdk => {
    console.log('Yandex SDK initialized');
    window.ysdk = ysdk;
  });

  ysdk.getPlayer(Тут отмечается ошибка)

  player.setData({
    Save: ['G.Egs'],
  }).then(() => {
    console.log('data is set');
  });
</script>

Я новичок и не очень понимаю, почему не работает

Документация


Ответы (1 шт):

Автор решения: Виталий Иванов

Ошибка происходит потому что ysdk - не задан, код ниже выполняется асинхронно

YaGames.init().then(ysdk => {
  console.log('Yandex SDK initialized');
  window.ysdk = ysdk;
});

таким образом переменная ysdk на момент вызова еще не определена.

Ты можешь пропускать объекты которые не объявлены добавив ? после объекта, в твоем случае ysdk?.getPlayer, но скорее всего это не решит проблему в твоем случае.

код ниже возможно решит твою проблему:

<script type="text/javascript">
  var player;
  var sdk;
  var ysdk;

  YaGames.init().then(ysdk => {
    console.log('Yandex SDK initialized');
    window.ysdk = ysdk;
    return Promise.resolve();
  }).then(
    () => {
      ysdk.getPlayer
        ...остальной код, выполнится после того как ysdk будет задан
    }
  )
</script>

аналогичным образом ты можешь дальше делать "паровозик" из Promise и then. Так же судя по документации которую ты предоставил функция getPlayer() тоже вернет Promise и ты можешь сделать примерно так

<script type="text/javascript">
  var player;
  var sdk;
  var ysdk;

  YaGames.init().then(ysdk => {
    console.log('Yandex SDK initialized');
    window.ysdk = ysdk;
    return Promise.resolve();
  }).then(
    () => {
      return ysdk.getPlayer(параметры)
    }).then(
    () => {
      ...и так далее
    })
</script>
→ Ссылка