Skip to content

Commit be94e2e

Browse files
committed
1. Модуль АсинхронностьСлужебный переименован в ОбещанияСлужебный
2. В API добавлена возможность ожидать завершения массива обещаний
1 parent 588bb2e commit be94e2e

File tree

6 files changed

+118
-5
lines changed

6 files changed

+118
-5
lines changed

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,18 @@
3737
Функция ВыполнитьДелегат(Действие, Параметры)
3838
```
3939

40+
#### ОжидатьВсе
41+
42+
```bsl
43+
// Ожидает исполнение всех переданных обещаний
44+
//
45+
// Параметры:
46+
// Обещания - Массив из Обещание - Обещания которых ожидаем
47+
// Таймаут - Число- Количество миллисекунд по истечении которых будет выброшено исключение
48+
//
49+
Процедура ОжидатьВсе(Обещания, Таймаут = 0) Экспорт
50+
```
51+
4052
### Класс Обещание
4153

4254
#### Получить

packagedef

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Описание.Имя("async")
2-
.Версия("0.2.0")
2+
.Версия("0.2.1")
33
.Автор("Кирилл Черненко")
44
.АдресАвтора("https://github.com/sfaqer")
55
.Описание("Фреймворк асинхронного исполнения для OneScript")
@@ -13,4 +13,5 @@
1313
.РазработкаЗависитОт("json")
1414
.РазработкаЗависитОт("asserts")
1515
.ЗависитОт("lambdas", "0.1.3")
16+
.ЗависитОт("fluent", "0.6.1")
1617
;

src/internal/Классы/Обещание.os

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858

5959
Результат = Новый Обещание(Алгоритм, ЭтотОбъект);
6060

61-
АсинхронностьСлужебный.ЗапуститьВыполнениеОбещания(Результат);
61+
ОбещанияСлужебный.ЗапуститьВыполнениеОбещания(Результат);
6262

6363
Возврат Результат;
6464

@@ -88,7 +88,7 @@
8888

8989
Результат = Новый Обещание(Алгоритм, ЭтотОбъект, Истина);
9090

91-
АсинхронностьСлужебный.ЗапуститьВыполнениеОбещания(Результат);
91+
ОбещанияСлужебный.ЗапуститьВыполнениеОбещания(Результат);
9292

9393
Возврат Результат;
9494

src/internal/Модули/АсинхронностьСлужебный.os renamed to src/internal/Модули/ОбещанияСлужебный.os

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#Использовать fluent
2+
13
#Область ОписаниеПеременных
24

35
Перем Рефлектор; // Для доступа к приватным полям обещания
@@ -61,6 +63,20 @@
6163

6264
КонецФункции
6365

66+
Процедура ОжидатьВсе(Обещания, Таймаут) Экспорт
67+
68+
Задания = ПроцессорыКоллекций.ИзКоллекции(Обещания)
69+
.Обработать("Обещание -> Рефлектор.ПолучитьСвойство(Обещание, ""Задание"")", ЭтотОбъект)
70+
.ВМассив();
71+
72+
Результат = ФоновыеЗадания.ОжидатьВсе(Задания, Таймаут);
73+
74+
Если Не Результат Тогда
75+
ВызватьИсключение "Превышено время ожидания получения результата";
76+
КонецЕсли;
77+
78+
КонецПроцедуры
79+
6480
#КонецОбласти
6581

6682
Рефлектор = Новый Рефлектор();

src/Модули/Обещания.os

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
Результат = Новый Обещание(Алгоритм, Параметры);
2323

24-
АсинхронностьСлужебный.ЗапуститьВыполнениеОбещания(Результат);
24+
ОбещанияСлужебный.ЗапуститьВыполнениеОбещания(Результат);
2525

2626
Возврат Результат;
2727

@@ -40,10 +40,20 @@
4040

4141
Результат = Новый Обещание(Действие, Параметры);
4242

43-
АсинхронностьСлужебный.ЗапуститьВыполнениеОбещания(Результат);
43+
ОбещанияСлужебный.ЗапуститьВыполнениеОбещания(Результат);
4444

4545
Возврат Результат;
4646

4747
КонецФункции
4848

49+
// Ожидает исполнение всех переданных обещаний
50+
//
51+
// Параметры:
52+
// Обещания - Массив из Обещание - Обещания которых ожидаем
53+
// Таймаут - Число- Количество миллисекунд по истечении которых будет выброшено исключение
54+
//
55+
Процедура ОжидатьВсе(Обещания, Таймаут = 0) Экспорт
56+
ОбещанияСлужебный.ОжидатьВсе(Обещания, Таймаут);
57+
КонецПроцедуры
58+
4959
#КонецОбласти

tests/Обещания.os

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,80 @@
4646

4747
КонецПроцедуры
4848

49+
&Тест
50+
Процедура ОжидаемВсе() Экспорт
51+
52+
// Дано
53+
54+
Параметры = Новый Массив();
55+
Параметры.Добавить(1);
56+
Параметры.Добавить(2);
57+
58+
Ждем = Новый Массив();
59+
60+
// BSLLS:DuplicatedInsertionIntoCollection-off
61+
// BSLLS:DuplicateStringLiteral-off
62+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
63+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
64+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
65+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
66+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
67+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
68+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
69+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
70+
// BSLLS:DuplicatedInsertionIntoCollection-on
71+
// BSLLS:DuplicateStringLiteral-on
72+
73+
// Когда
74+
75+
Обещания.ОжидатьВсе(Ждем);
76+
77+
// Тогда
78+
79+
Для каждого Обещание Из Ждем Цикл
80+
81+
Утверждения.ПроверитьРавенство(Обещание.Состояние(), СостояниеФоновогоЗадания.Завершено);
82+
Утверждения.ПроверитьРавенство(Обещание.Получить(), 3);
83+
84+
КонецЦикла;
85+
86+
КонецПроцедуры
87+
88+
Процедура НеДождалисьВсех() Экспорт
89+
90+
// Дано
91+
92+
Параметры = Новый Массив();
93+
Параметры.Добавить(1);
94+
Параметры.Добавить(2);
95+
96+
Ждем = Новый Массив();
97+
98+
// BSLLS:DuplicatedInsertionIntoCollection-off
99+
// BSLLS:DuplicateStringLiteral-off
100+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
101+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
102+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
103+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
104+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
105+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
106+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
107+
Ждем.Добавить(Обещания.ВыполнитьЛямбду("(П, В) -> Возврат СложитьСЗадержкой(П, В)", ЭтотОбъект, Параметры));
108+
// BSLLS:DuplicatedInsertionIntoCollection-on
109+
// BSLLS:DuplicateStringLiteral-on
110+
111+
// Тогда
112+
113+
Параметры = Новый Массив;
114+
Параметры.Добавить(Ждем);
115+
Параметры.Добавить(10);
116+
117+
Ожидаем.Что(Обещания)
118+
.Метод("ОжидатьВсе", Параметры)
119+
.ВыбрасываетИсключение("Превышено время ожидания получения результата");
120+
121+
КонецПроцедуры
122+
49123
Функция СложитьСЗадержкой(Первое, Второе) Экспорт
50124

51125
Приостановить(100);

0 commit comments

Comments
 (0)