Я немного озадачен.
У меня есть клиентская игра JS, созданная с использованием Phaser, в комплекте с приложением Nodejs / Express, которое запускает сервер и обслуживает файлы игры.Мое намерение состоит в том, чтобы позволить пользователю вводить имя пользователя и извлекать сохраненные данные из базы данных, предпочтительно на основе облачных вычислений (например, MongoDB Atlas), чтобы мне не пришлось хранить данные самостоятельно.
Однако из-за асинхронной природы Nodejs и JS я не могу найти способ получить данные сохранения (скорее всего, только данные JSON) из БД в свой код игры JS, чтобы я могманипулировать им и запустить приложение.Все примеры, которые я видел, используя AJAX для клиентского JS, просто отображали данные в HTML, когда я хочу использовать такие данные, как текстовая переменная или переменная JSON в JS.
Что я рассматриваюсейчас помещаю всю мою игру в функцию обратного вызова и передаю ответ от вызова AJAX приложению MongoDB Stitch.
Например:
const client = stitch.Stitch.initializeDefaultAppClient('appname');
const db = client.getServiceClient(stitch.RemoteMongoClient.factory, 'mongodb-atlas').db('GameDB');
client.auth.loginWithCredential(new stitch.AnonymousCredential()).then(user =>
db.collection('GameSaves')
.updateOne({owner_id:client.auth.user.id}, {$set:{number:42}}, {upsert:true})).then(() =>
db.collection('GameSaves').find({owner_id: client.auth.user.id}, { limit: 100}).asArray()
).then(startGame) //passes the docs to startGame()
.catch(err => {
console.error(err)
});
Но у меня есть ощущение, что победилне работает (в моих тестах NodeJS fetch () я просто получаю объекты Promise без возможности их анализа, даже в блоке ".then") или что есть гораздо лучший способ сделать это.
Я пытаюсь избежать использования localStore, чтобы пользователь мог запустить игру на компьютере, а затем на своем телефоне.