2016-09-21 3 views
2

Ich habe derzeit einige externe Javascript Code (, die asynchron ausgeführt wird), die eine iOS-App mit Schnittstellen und kann Teile von bedingt bewerten. Gerade jetzt, wenn die Javascript Funktionen zurückkehren, geben sie ein "Versprechen" an die iOS App zurück, die gelöst werden muss. Gibt es eine Möglichkeit, ein Versprechen in iOS über JavascriptCore zu lösen; oder kämpfe ich hier einen verlustreichen Kampf und sollte ich stattdessen "alle" Versprechen in Javascript lösen, bevor ich Werte zurück an iOS zurückgebe?Auflösen eines Javascript-Versprechens in iOS mit JavascriptCore

Antwort

0

Werfen Sie einen Blick auf diese Bibliothek: https://github.com/marcuswestin/WebViewJavascriptBridge zumindest als Beispiel.

Es verwaltet js Promise nicht als JS-Ergebnis in nativem Code, was meiner Meinung nach nicht möglich ist, aber es implementiert eine Möglichkeit, async JS-Aufrufe von systemeigenem Code zu verwalten.

Wenn ich mich nicht falsch, die Hauptlogik zu verwalten async JS nennt, ist:

  1. Wenn nativen Code benötigt async JS-Methode aufrufen, speichert nativen Rückruf in einen Rückrufe Registry und weisen Sie ihm eine Kennung .
  2. Dann ruft es die JS-Methode auf und übergibt die Rückrufkennung.
  3. Wenn die asynchrone JS-Methode endet (mit Promise oder was auch immer), ruft sie systemeigenen Code mit derselben Rückrufkennung auf.
  4. Dadurch kann der systemeigene Code den in der Registrierung gespeicherten Rückruf aufrufen.

Die Bibliothek ist gut strukturiert erlaubt Handler Registrierung etc ..., aber ich denke, die rohe Logik für Native -> JS Anrufe ist im Grunde das.

Verwandte Themen