Задать вопрос
Dan83
@Dan83
Программист самоучка, разработчик одиночка

Значение переменной в строку или сохранение в VK?

Доброго времени суток! Предупреждаю сразу, я - тупой! JS у меня старый и с JSON не встречался ни разу!
Пытаюсь сделать сохранение в игре через ВК библиотеку, но не получается и мне не понятно почему.
Получение данных из библиотеки
var playerScoreNumber = {"scorePlayer": 0}

    var anagramsScore;

    var playerParse = JSON.parse(playerScoreNumber);


    vkBridge.send('VKWebAppStorageGet', {

    keys: [

        'scorePlayerAnagrams',

    ]})

    .then((data) => {

        if (data.keys) {

        // Значения получены    

            anagramsScore = parseInt(data.keys[0].value);

        }
  })

  .catch((error) => {

    console.log(error);

    anagramsScore = playerParse.scorePlayer;

  });


Сохранение данных:

function funcLevelUP() {

        anagramsScore += 5;

        scoreID.text(playerParse.scorePlayer);

        if (anagramsScore % 25 === 0) {

            funcLifeUser(lifeUserUP);

            if (musicYes) {

                soundLifeUP.play();

            }

        }

        var tmpPlayer = JSON.stringify(playerScoreNumber);
        
		vkBridge.send('VKWebAppStorageSet', {

		key: 'scorePlayerAnagrams',

		value: String(tmpPlayer),
        
		}).then((data) => {

	if (data.result) {

	// Значение переменной задано
	}

	}).catch((error) => {


7513d5f61d4158e1e9665e5992d384ec.png

dd63b17eaaaf0b5fa7065a3a350fd017.png

Что не так и как исправить? Благодарю!
  • Вопрос задан
  • 148 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию + ИИ
    6 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
- var playerParse = JSON.parse(playerScoreNumber);
+ const playerParse = playerScoreNumber;

или
- var playerScoreNumber = {"scorePlayer": 0}
+ const playerScoreNumber = '{"scorePlayer": 0}';

JSON.parse ждёт на входе строку, а вы передаёте туда объект. При неявном преобразовании в строку этот объект превращается в [object Object], что не является валидной JSON-строкой.
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
JSON.parse(playerScoreNumber) — туда строку, а не объект, упадёт с SyntaxError. Убери эту строку.

Плюс несоответствие: сохраняешь через JSON.stringify (получается '{"scorePlayer":0}'), а читаешь через parseInt — будет NaN. Проще хранить просто число: value: String(anagramsScore), тогда parseInt при чтении заработает.

И добавь перед сохранением: playerScoreNumber.scorePlayer = anagramsScore, либо вообще убери playerScoreNumber и работай с anagramsScore напрямую.

p.s. scoreID.text(playerParse.scorePlayer) замени на scoreID.text(anagramsScore).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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