L’avenir de Nashorn et Scala pour la conversion de JS Promise

J’ai un côté serveur implémenté dans Scala et une React/Flux frontale basée sur React/Flux . Mes services renvoient des Futures et ils sont gérés dans les réponses AsyncResult for JSON de AsyncResult .

Pour la configuration de rendu côté serveur / isomorphe, je ne voulais pas modifier les services pour bloquer, alors j’ai commencé avec la conversion Scala Future-> java.util.function.Function indiquée ici .

Mais le répartiteur de Flux aimerait avoir JS Promise. Jusqu’à présent, j’ai trouvé une solution plutôt compliquée autour de cette diapositive.

Existe-t-il un moyen recommandé de traiter cette conversion Scala Future -> JS Promise?

Je vais essayer de répondre à la partie Scala Future to JS Promise de la question. Comme vous n’avez pas fourni d’exemple. Je vais fournir un ici avec la conversion. Si nous disons que nous avons un avenir mis en œuvre à Scala de cette manière:

 val f: Future = Future { session.getX() } f onComplete { case Success(data) => println(data) case Failure(t) => println(t.getMessage) } 

alors le code correspondant dans JavaScript / ES6 pourrait ressembler à ceci:

 var f = new Promise(function(resolve, reject) { session.getX(); }); f.then((data) => { console.log(data); }).catch((t) => { console.log(t); })); 

Je sais que ce n’est pas Scala, mais je voulais l’inclure pour être complet. Ceci est une cartographie de Future to Promise tirée de la documentation de Scala.js :

 +-----------------------------------+------------------------+-------------------------------------------------------------------------------------------------------+ | Future | Promise | Notes | +-----------------------------------+------------------------+-------------------------------------------------------------------------------------------------------+ | foreach(func) | then(func) | Executes func for its side-effects when the future completes. | | map(func) | then(func) | The result of func is wrapped in a new future. | | flatMap(func) | then(func) | func must return a future. | | recover(func) | catch(func) | Handles an error. The result of func is wrapped in a new future. | | recoverWith(func) | catch(func) | Handles an error. func must return a future. | | filter(predicate) | N/A | Creates a new future by filtering the value of the current future with a predicate. | | zip(that) | N/A | Zips the values of this and that future, and creates a new future holding the tuple of their results. | | Future.successful(value) | Promise.resolve(value) | Returns a successful future containing value | | Future.failed(exception) | Promise.reject(value) | Returns a failed future containing exception | | Future.sequence(iterable) | Promise.all(iterable) | Returns a future that completes when all of the futures in the iterable argument have been completed. | | Future.firstCompletedOf(iterable) | Promise.race(iterable) | Returns a future that completes as soon as one of the futures in the iterable completes. | +-----------------------------------+------------------------+-------------------------------------------------------------------------------------------------------+