Promise-акторы
Promise-акторы — это акторы, которые представляют промис, выполняющий некоторую асинхронную задачу. Они могут разрешиться с некоторым выходным значением или отклониться с ошибкой.
Возможности Promise-акторов¶
| Возможность | Примечания | |
|---|---|---|
| ❌ | Получение событий | Promise-акторы в настоящее время не получают события. |
| ✅ | Отправка событий | Promise-акторы могут отправлять события другим акторам, на которые у них есть ссылка, например, предоставленным в input. |
| ❌ | Порождение акторов | Promise-акторы в настоящее время не могут порождать новых акторов. |
| ✅ | Input | Вы можете передавать input Promise-акторам. |
| ✅ | Output | Promise-акторы могут производить output, который является разрешённым значением промиса. |
Логика Promise-актора¶
Вы можете определить логику Promise-актора с помощью создателя логики актора fromPromise(...), который принимает функцию, возвращающую промис, и возвращает логику актора, которую можно использовать для создания Promise-акторов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
Входные данные Promise-актора¶
Вы можете передать input Promise-актору, передав его в функцию createActor(...) как свойство input второго аргумента. В логике промиса (fromPromise(promiseFn)) вы читаете свойство input первого аргумента, переданного в функцию промиса:
1 2 3 4 5 6 7 8 9 10 11 12 | |
Тип input выводится из типа первого аргумента функции промиса. Вы также можете указать явный тип input во втором параметре обобщения:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
Выходные данные Promise-актора¶
Чтобы получить окончательное разрешённое значение output Promise-актора, вы можете подписаться на Promise-актор и проверить свойство status снимка. Если status равен 'done', вы можете получить доступ к свойству output снимка для получения разрешённого значения. В противном случае output будет undefined.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Вы также можете использовать toPromise(...) для преобразования любого актора, включая Promise-акторы, в промис. Это полезно, если вы хотите использовать await для output актора:
1 2 3 4 5 6 7 8 9 10 11 | |
Обработка ошибок Promise-актора¶
Если в логике промиса происходит ошибка, Promise-актор отклонится с ошибкой. Вы можете подписаться на Promise-актор и проверить свойство status снимка в наблюдателе ошибок (свойство error объекта-наблюдателя).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Остановка Promise-акторов¶
Вы можете остановить Promise-актор, созданный с помощью createActor(promiseLogic), вызвав .stop() на экземпляре актора. Это отбросит разрешённое или отклонённое значение промиса и удалит все подписки на Promise-актор.
Вы также можете прервать Promise-актор, передав ему signal:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |