|
| ||
ДНН 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]; КонецФункции Все равно сначала выбранный файл, а потом Самое первое | ||
Cthulhu 3 - 14.12.20 - 23:15 | так вроде и описывалось
инициализация обещания >>> переход к евонному "ждать", как только оно дождалось - продолжение выполнения сразу после инициализации обещания и далее... | ||
ДНН 4 - 14.12.20 - 23:22 | (3) 1. Дошли до строчки Обещание = Диалог.ВыбратьАсинх(); открывается диалог. Так как это асинхронный метод выполнение кода продолжается дальше
2. доходим до строчки МассивКаталогов = Ждать Обещание; начинается ожидание, но выполнение код продолжается, так как это асинхронная функция 3. возвращаемся в процедуру Команда1, цикл должен вывести цифры от 1 до 104. Каталог = Ждать Обещание; - ждем результат асинхронной функции ОткрытьДиалог() 5. Выбрали файл, управление переходит в точку МассивКаталогов = Ждать Обещание; получаем из массива первый выбранный файл, возвращаем его. 6. в Обещании из Процедуры Команда1 появляется результат обещания, следовательно управление переходит в строку Каталог = Ждать Обещание;, сообщаем имя каталога Насколько я понял должно быть так | ||
Cthulhu 5 - 15.12.20 - 01:21 | (4): нет, начиная с п.2 - нет. никуда ничего не продолжается пока не завершится ожидание. | ||
ДНН 6 - 15.12.20 - 01:26 | (5) Не продолжается то что ниже, но выполняется цикл из первой процедуры. Это даже по отладке видно | ||
Cthulhu 7 - 15.12.20 - 02:44 | извини, по кругу бегать надоело. все что зналось - тебе сказалось, удачи. | ||
Провинциальный 1сник 8 - 15.12.20 - 04:52 | Нихрена не понятно с этими Асинхами и Обещаниями.. мозговыворот какой-то |
|
Список тем форума |