|
|
Асинх / Ждать |
☑ |
|
0
ДНН
14.12.20
✎
22:41
|
Платформа 8.3.18
Код:
&НаКлиенте
Асинх Процедура Команда1(Команда)
Обещание = ОткрытьДиалог();
Для ё = 1 По 10 Цикл
Сообщить(ё);
КонецЦикла;
Каталог = Ждать Обещание;
Сообщить(Каталог);
КонецПроцедуры
&НаКлиенте
Асинх Функция ОткрытьДиалог()
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Обещание = Диалог.ВыбратьАсинх();
МассивКаталогов = Ждать Обещание;
Возврат МассивКаталогов[0];
КонецФункции
Открывается диалог выбора файла и я секунд 5 ничего не выбираю.
Насколько я понял сначала должны вывестить цифры от 1 до 10 (так как я еще не выбрал файл), а потом выбранный файл. Однако сначала выводится выбранный файл, а только потом цифры. Почему так?
|
|
|
1
ДНН
14.12.20
✎
22:52
|
При этом в отладке я сначала попадаю в цикл, а только потом открывается диалог выбора. Но сообщение из диалога все равно впереди
|
|
|
2
ДНН
14.12.20
✎
22:59
|
И даже если сделать так:
&НаКлиенте
Асинх Процедура Команда1(Команда)
Сообщить("Самое первое");
Обещание = ОткрытьДиалог();
Для ё = 1 По 10 Цикл
Сообщить(ё);
КонецЦикла;
Каталог = Ждать Обещание;
Сообщить(Каталог);
КонецПроцедуры
&НаКлиенте
Асинх Функция ОткрытьДиалог()
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Обещание = Диалог.ВыбратьАсинх();
МассивКаталогов = Ждать Обещание;
Возврат МассивКаталогов[0];
КонецФункции
Все равно сначала выбранный файл, а потом Самое первое
|
|
|
3
Cthulhu
14.12.20
✎
23:15
|
так вроде и описывалось
инициализация обещания >>> переход к евонному "ждать", как только оно дождалось - продолжение выполнения сразу после инициализации обещания и далее...
|
|
|
4
ДНН
14.12.20
✎
23:22
|
(3) 1. Дошли до строчки Обещание = Диалог.ВыбратьАсинх(); открывается диалог. Так как это асинхронный метод выполнение кода продолжается дальше
2. доходим до строчки МассивКаталогов = Ждать Обещание; начинается ожидание, но выполнение код продолжается, так как это асинхронная функция
3. возвращаемся в процедуру Команда1, цикл должен вывести цифры от 1 до 10
4. Каталог = Ждать Обещание; - ждем результат асинхронной функции ОткрытьДиалог()
5. Выбрали файл, управление переходит в точку МассивКаталогов = Ждать Обещание; получаем из массива первый выбранный файл, возвращаем его.
6. в Обещании из Процедуры Команда1 появляется результат обещания, следовательно управление переходит в строку Каталог = Ждать Обещание;, сообщаем имя каталога
Насколько я понял должно быть так
|
|
|
5
Cthulhu
15.12.20
✎
01:21
|
(4): нет, начиная с п.2 - нет. никуда ничего не продолжается пока не завершится ожидание.
|
|
|
6
ДНН
15.12.20
✎
01:26
|
(5) Не продолжается то что ниже, но выполняется цикл из первой процедуры. Это даже по отладке видно
|
|
|
7
Cthulhu
15.12.20
✎
02:44
|
извини, по кругу бегать надоело. все что зналось - тебе сказалось, удачи.
|
|
|
8
Провинциальный 1сник
15.12.20
✎
04:52
|
Нихрена не понятно с этими Асинхами и Обещаниями.. мозговыворот какой-то
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший