Способы вызова методов
Методы класса CryptoPlugin могут быть вызваны тремя различными способами:
- с использованием Promise (новый асинхронный интерфейс);
- асинхронно с использованием функций обратного вызова (устаревший асинхронный интерфейс);
- синхронно (устаревший синхронный интерфейс).
В результате выполнения методов Рутокен Плагин возвращается либо результат выполнения в соответствии с документацией на метод, либо объект ошибки.
Объект ошибки содержит поле message:string, позволяющее определить причину ошибки. В случае если ошибка возвращается с функционального уровня Рутокен Плагин, message содержит строковое представление кода ошибки.
Новый асинхронный интерфейс
Все методы Рутокен Плагин работают асинхронно и возвращают Promise. Cразу после вызова все методы возвращают управление.При успешном завершении возвращенный Promise переходит в состояние "fulfilled" и в обработчик передается результат выполнения метода.
В случае ошибки Promise переходит в состояние "rejected" и в обработчик передается объект ошибки.
Устаревший интерфейс
В целях сохранения совместимости Рутокен Плагин поддерживает старый интерфейс, основанный на функциях обратного вызова.Подсказка
Рекомендуется использовать новый асинхронный интерфейс с Promise.
Методы Рутокен Плагина могут вызываться двумя способами: асинхронно и синхронно. При использовании синхронных вызовов происходит блокирование интерфейса браузера на время выполнения метода.
Устаревший асинхронный интерфейс
Все методы принимают resultCallback и errorCallback двумя последними параметрами и работают асинхронно. Сразу после вызова все методы возвращают управление.При успешном завершении метод вызывает resultCallback, который принимает один параметр – результат выполнения операции.
В случае ошибки метод вызывает errorCallback, который принимает первым параметром объект ошибки Рутокен Плагин.
Устаревший синхронный интерфейс
Для вызова методов Рутокен Плагина синхронно достаточно не передавать в качестве последних двух параметров функции обратного вызова. На время выполнения метода происходит передача управления Рутокен Плагину и блокируется пользовательский интерфейс браузера.При успешном завершении метода результат будет возвращен из вызванного метода.
В случае ошибки будет создано исключение.
Пример:
//Использование интерфейса с Promise window.onload = function () { rutoken.ready.then(function () { const isFirefox = !!window.navigator.userAgent.match(/firefox/i) && !window.navigator.userAgent.match(/seamonkey/i); if (window.chrome || isFirefox) { return rutoken.isExtensionInstalled(); } else { return Promise.resolve(true); } }).then(function (result) { if (result) { return rutoken.isPluginInstalled(); } else { throw "Rutoken Extension wasn't found"; } }).then(function (result) { if (result) { return rutoken.loadPlugin(); } else { throw "Rutoken Plugin wasn't found"; } }).then(function (plugin) { //Можно начинать работать с Рутокен Плагином return plugin.enumerateDevices(); }).then(onSuccess(result), onError(reason)); } //Для работы со старым интерфейсом plugin.wrapWithOldInterface() .then(function (wrappedPlugin) { //Можно начинать работать через старый интерфейс Рутокен Плагина //Использование старого асинхронного интерфейса wrappedPlugin.enumerateDevices( function(devices) { console.log(devices); }, function(error) { console.log(error); }); //Использование синхронного интерфейса var devices = Array(); try { devices = plugin.enumerateDevices(); } catch (error) { console.log(error); } });