Как получить значение из ассинхронной процедуры

1. d.baranov 03.03.24 09:00 Сейчас в теме
Добрый день!
Для реализации разных запросов по API в честный знак написал код который возвращает токен.
Но на клиенте использование синхронных методов запрещено.
Переделал получение сертификата вот так:
Функция ПолучитьСертификат() 
    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ТипХранилищаСертификатов", ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты);
    ДополнительныеПараметры.Вставить("ПроверятьДатуОкончания", Истина);
    ОписаниеОповещения = Новый ОписаниеОповещения("ПолучитьСписокСертификатовЗавершение", ЭтотОбъект, ДополнительныеПараметры);
    ДополнительныеПараметры.Вставить("ОповещениеЗавершения", ОписаниеОповещения);
    ОбратныйВызов = Новый ОписаниеОповещения("ИнициализацияЗавершение", ЭтотОбъект, ДополнительныеПараметры);
    Криптография = Новый МенеджерКриптографии;
    Криптография.НачатьИнициализацию(ОбратныйВызов, "", "", 75);  
КонецФункции 
Процедура ПолучитьСписокСертификатовЗавершение(СписокСертификатов, ДополнительныеПараметры) Экспорт
    Отпечаток = "68c9.........................ec63f7";
    Для Каждого Строка Из СписокСертификатов Цикл
        Если СтрЗаменить(Строка.Отпечаток," ","") = ВРег(Отпечаток) Тогда
            Сертификат = Строка;
            Прервать;
        КонецЕсли;
    КонецЦикла;   
КонецПроцедуры
&НаКлиенте
Процедура ИнициализацияЗавершение(Менеджер, ДополнительныеПараметры) Экспорт
    Оповещение = Новый ОписаниеОповещения("ПолучениеХранилищаСертификатовЗавершение", ЭтотОбъект, ДополнительныеПараметры);
    Менеджер.НачатьПолучениеХранилищаСертификатов(Оповещение, ДополнительныеПараметры.ТипХранилищаСертификатов);
КонецПроцедуры
&НаКлиенте
Процедура ПолучениеХранилищаСертификатовЗавершение(Хранилище, ДополнительныеПараметры) Экспорт
    Оповещение = Новый ОписаниеОповещения("МассивСертификатовЗавершение", ЭтотОбъект, ДополнительныеПараметры);
    Хранилище.НачатьПолучениеВсех(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура МассивСертификатовЗавершение(Сертификаты, ДополнительныеПараметры) Экспорт
    Результат = Новый Массив;
    ТекущаяДата = ТекущаяДата();
    Для Каждого Сертификат Из Сертификаты Цикл
        Если ДополнительныеПараметры.ПроверятьДатуОкончания И Сертификат.ДатаОкончания < ТекущаяДата Тогда 
            Продолжить;
        КонецЕсли;
        Результат.Добавить(Сертификат);
    КонецЦикла;
    ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеЗавершения, Результат); 
КонецПроцедуры

Показать

Дальнейшие действия по получению токена после получения сертификата надо писать в процедуре ПолучитьСписокСертификатовЗавершение.
Вопрос: Как теперь вернуть из процедуры ПолучитьСписокСертификатовЗавершение результат запрашивающему токен.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 03.03.24 09:29 Сейчас в теме
Никак. Надо исходную процедуру на этом вызове заканчивать, а все дальнейшие действия переносить в обработку оповещения...
3. d.baranov 03.03.24 11:24 Сейчас в теме
Спасибо. Похоже никак.
Не писать же каждый раз эту преамбулу с получением сертификата, а затем токена при каждом запросе в ЧЗ.
Сделаю наверное регистр сведений по аналогии с УТ.
Они хранят ключ сессии и периодически его обновляют.
Мне больше подойдет хранить сразу токен.
А потом уже при создании разных запросов в ЧЗ обращаться к этому регистру сведений.
Токен действителен в течении 11 часов. Сделать регламентное задание, которое будет обновлять этот токен по расписанию.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот