Вход | Регистрация
 

Асинх / Ждать

Асинх / Ждать
Я
   ДНН
 
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 до 10
4. Каталог = Ждать Обещание; - ждем результат асинхронной функции ОткрытьДиалог()
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
Нихрена не понятно с этими Асинхами и Обещаниями.. мозговыворот какой-то

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.