API v4.11.2.0

Способы вызова методов

Методы класса 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);
    }
});