|
Асинх / Ждать | ☑ | ||
---|---|---|---|---|
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
|
Нихрена не понятно с этими Асинхами и Обещаниями.. мозговыворот какой-то
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |