Ионная Кордова Promise.race([]).наконец, не является функцией

#ios #typescript #cordova #ionic-framework #keycloak

Вопрос:

У меня есть ионный проект , который все еще использует Cordova@10.0.0 , angular@5.2.11 и typescript: ^3.9.5 amp; node@10

В настоящее время я пытаюсь реализовать аутентификацию с помощью ключа. Следуя этим шагам здесь Официальный ключ, я пытаюсь внедрить это в свое приложение.

Шаги, которые я сделал:

  1. Добавьте "cordova-plugin-inappbrowser": "5.0.0" к моему devDependencies в package.json
  2. Добавьте "keycloak-js": "^15.0.2" к моему dependencies в package.json
  3. Обновил свой tsconfig.json , где я добавил "ES2018" в compilerOptions - lib
  4. Обновил свой tsconfig.json , где я добавил es2015 в compilerOptions - module
  5. Обновил свой tsconfig.json , где я добавил es6 в compilerOptions - target
  6. config.xml В обновленной целевой версии iOS <preference name="deployment-target" value="14.0" />

Приложение работает нормально.

Когда приложение загружается, я получаю следующую ошибку в консоли симулятора safari:

 Error: 
Uncaught (in promise): TypeError: Promise.race([promise, timeoutPromise]).finally is not a function. 
(In 'Promise.race([promise, timeoutPromise]).finally(function () { clearTimeout(timeoutHandle); })', 
'Promise.race([promise, timeoutPromise]).finally' is undefined)
 

Обещание, вызывающее эту проблему, можно найти здесь, в официальном репозитории Github от Keycloak. При изменении этого .then(..) значения ошибка больше не возникает. Но изменение зависимости вручную на самом деле не является вариантом.

Я что-то пропустил или это действительно ошибка? Я не могу найти ничего полезного в Интернете.

Как я инициализирую брелок:

 public keycloak: Keycloak.KeycloakInstance;

this.keycloak = Keycloak({
  clientId: 'webapp',
  realm: 'master',
  url: 'http://localhost:8080/auth/'
});

this.keycloak.init({
  adapter: 'cordova'
})
 

Выход из ionic info :

 Ionic:

   Ionic CLI          : 6.17.0 (/usr/local/lib/node_modules/@ionic/cli)
   Ionic Framework    : ionic-angular 3.9.2
   @ionic/app-scripts : 3.2.4

Cordova:

   Cordova CLI       : 10.0.0
   Cordova Platforms : android 7.1.4, ios 6.2.0
   Cordova Plugins   : no whitelisted plugins (18 plugins total)

Utility:

   cordova-res                          : 0.15.3
   native-run (update available: 1.4.1) : 1.4.0

System:

   ios-deploy : 1.11.4
   ios-sim    : 8.0.2
   NodeJS     : v10.24.1 (/usr/local/Cellar/node@10/10.24.1_1/bin/node)
   npm        : 6.14.12
   OS         : macOS Big Sur
   Xcode      : Xcode 13.0 Build version 13A233
 

И navigator.userAgend дает следующее для используемой версии safari:

 "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
 

Я хотел бы также упомянуть. В веб-инспекторе приложения Cordova на симуляторе при вызове new Promise(() => {}).finally; он возвращает undefined результат, но когда я делаю это в веб-инспекторе Safari на симуляторе, он возвращает мне действительный вывод.

Комментарии:

1. ваша версия ионного довольно старая. Я бы обновил эту часть.