Skip to content

Commit

Permalink
добавлено значение contextAsync
Browse files Browse the repository at this point in the history
  • Loading branch information
lentryd committed Feb 24, 2024
1 parent df143fd commit 8665d76
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 0 deletions.
60 changes: 60 additions & 0 deletions docs/examples/contextAsync.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Пример использования значения `.contextAsync`

- [Зачем нужен?](#зачем-нужен)
- [Как использовать?](#как-использовать)
- [Назад к методам](../guide.md#contextasync)

## Зачем нужен?

Это значение позволяет получить доступ к [контексту](../reference.md#context) без предварительной авторизации.

## Как использовать?

> Не работает при импорте класса `Safe`
Представим, что мы хотим получить оценки первого предмета из доступных и чтобы не вызывать авторизацию, мы можем воспользоваться этим значением.

```typescript
import NS from "netschoolapi";

const user = new NS({
origin: "https://example.com",
login: "Иванов",
password: "123456",
school: "МБОУ ...", // Название школы (полностью) или её id
});

(async function () {
// Получаем массив предметов
const { subjects } = await user.contextAsync;

// Получаем отчет "Отчет об успеваемости ученика"
const report = await user.grades({ subjectId: subjects[0].id });
console.log(report);
})();
```

Без этого значения код выглядел бы следующим образом:

```typescript
import NS from "netschoolapi";

const user = new NS({
origin: "https://example.com",
login: "Иванов",
password: "123456",
school: "МБОУ ...", // Название школы (полностью) или её id
});

(async function () {
// Авторизуемся
await user.logIn();

// Получаем массив предметов
const { subjects } = await user.context;

// Получаем отчет "Отчет об успеваемости ученика"
const report = await user.grades({ subjectId: subjects[0].id });
console.log(report);
})();
```
11 changes: 11 additions & 0 deletions docs/guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
- [.journal()](#journal)
- [Дополнительно](#дополнительно)
- [.fetch()](#fetch)
- [.contextAsync](#contextasync)

## Управление сессией

Expand Down Expand Up @@ -228,3 +229,13 @@
#### Возвращает объект класса [Response](https://www.npmjs.com/package/node-fetch#class-response)

#### [Пример использования](examples/fetch.md)

---

### .contextAsync

> Это значение, а не метод, и оно не доступно в классе `Safe`.
#### Возвращает объект класса [Context](reference.md#context), представляющий асинхронный контекст

#### [Пример использования](examples/contextAsync.md)
16 changes: 16 additions & 0 deletions src/NetSchoolApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,22 @@ export default class NetSchoolApi extends NS {
});
}

/** Контекст который доступен без авторизации */
get contextAsync(): Promise<NonNullable<NS["context"]>> {
// Если нет контекста, то создаём (через авторизацию)
return new Promise((resolve, reject) => {
if (this.context) {
resolve(this.context);
} else {
this.logIn()
.then(() => {
resolve(this.context as NonNullable<NS["context"]>);
})
.catch(reject);
}
});
}

/** Открытие сессии (только если она закрыта) */
async logIn(): Promise<Session> {
const valid = await super.sessionValid();
Expand Down

0 comments on commit 8665d76

Please sign in to comment.