https://github.com/yuriyvyatkin/ajs-hw-10.1-promises
ДЗ №1 к лекции «Promises, async/await» курса «Продвинутый JavaScript» Нетологии
https://github.com/yuriyvyatkin/ajs-hw-10.1-promises
javascript jest promises
Last synced: 8 months ago
JSON representation
ДЗ №1 к лекции «Promises, async/await» курса «Продвинутый JavaScript» Нетологии
- Host: GitHub
- URL: https://github.com/yuriyvyatkin/ajs-hw-10.1-promises
- Owner: yuriyvyatkin
- Created: 2021-07-11T00:52:17.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-07-11T03:58:31.000Z (over 4 years ago)
- Last Synced: 2025-01-04T01:39:24.192Z (9 months ago)
- Topics: javascript, jest, promises
- Language: JavaScript
- Homepage:
- Size: 137 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Домашнее задание №1 к лекции «Promises, async/await»
[](https://ci.appveyor.com/project/yuriyvyatkin/ajs-hw-10-1-promises)
## Promises
### Легенда
JavaScript живёт в асинхронном мире и большинство операций в нём так же выполняются асинхронно. Вы реализовали возможность экспорта сохранённого прогресса игры в виде JSON. Теперь нужно реализовать загрузку из файла.
### Описание
Для вас реализованы функции-заглушки, которая эмулируют чтение файла и преобразование прочитанного в json. Ваша задача - реализовать класс `GameSavingLoader` с методом `load`, который загружает данные (с помощью функции `read`), парсит их (с помощью функции `json()`) и создаёт объект типа `GameSaving`.
Модуль `parser.js`:
```javascript
export default function json(data) {
return new Promise((resolve, reject) => {
// эмуляция обработки ArrayBuffer
setTimeout(() => {
resolve(String.fromCharCode.apply(null, new Uint16Array(data)));
}, 500);
});
}
```Модуль `reader.js`:
```javascript
export default function read() {
return new Promise((resolve, reject) => {
// эмуляция чтения файла
setTimeout(() => {
const data = '{"id":9,"created":1546300800,"userInfo":{"id":1,name":"Hitman","level":10,"points":2000}}';
return (input => {
const buffer = new ArrayBuffer(input.length * 2);
const bufferView = new Uint16Array(buffer);
for (let i = 0; i < input.length; i++) {
bufferView[i] = input.charCodeAt(i);
}
resolve(buffer);
})(data);
}, 1000);
});
}
```Пример использования класса (если бы это был синхронный код)
```javascript
export default class GameSavingLoader {
static load() {
const data = read(); // возвращается Promise!
const value = json(data); // возвращается Promise!
return value;
}
}
```
Вам нужно переписать метод `load` так, чтобы он возвращал `Promise` с данными (см. формат ниже).Спецификации объекта типа `GameSaving`:
```javascript
{
"id": , // id сохранения
"created": , // timestamp создания
"userInfo": {
"id": , // user id
"name": , // user name
"level": , // user level
"points": // user points
}
}
```Т.е. итоговый ваш код должен работать так (модуль `app.js`):
```javascript
GameSavingLoader.load().then((saving) => {
// saving объект класса GameSaving
}, (error) => {
// ...
});
```