w3schools then promises nodejs from ejemplo all javascript java scala nashorn

javascript - then - return value from promise



Futuro de Nashorn y Scala a la conversión JS Promise (1)

Trataré de responder a Scala Future a JS Promise como parte de la pregunta. Como no has proporcionado un ejemplo. Voy a proporcionar uno aquí con la conversión. Si decimos que tenemos un Futuro implementado en Scala de esta manera:

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

entonces el código correspondiente en JavaScript / ES6 podría verse así:

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

Sé que esto no es Scala, pero quería incluirlo para que esté completo. Este es un mapeo de Future to Promise tomado de los documentos 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. | +-----------------------------------+------------------------+-------------------------------------------------------------------------------------------------------+

Tengo un lado del servidor implementado en el front-end basado en Scala y React/Flux . Mis servicios devuelven Futures y se manejan dentro de AsyncResult de Scalatra para respuestas JSON.

Para la configuración de representación isomórfica / del lado del servidor no quería cambiar los servicios para que sean bloqueados, así que comencé con Scala Future-> java.util.function.Function conversion se muestra aquí .

Pero el despachador de Flux desea tener JS Promise. Hasta ahora solo he encontrado una forma bastante complicada para este Diapositivas 68-81

¿Hay alguna forma recomendada de manejar esta conversión de Scala Future -> JS Promise?