Nashorn和Scala未来要JS Promise转换

我有一个在ScalaReact/Flux前端实现的服务器端。 我的服务返回Futures ,他们在Scalatra的AsyncResult中处理JSON响应。

对于同构/服务器端渲染设置我不想改变服务被阻止,所以我开始与Scala Future-> java.util.function.Function转换显示在这里 。

但Flux的调度员想要JS Promise。 到目前为止,我在这张幻灯片68-81中发现了相当复杂的探测方式

有没有build议的方式来处理这个Scala Future – > JS Promise转换?

我会尽量回答斯卡拉未来JS承诺问题的一部分。 因为你还没有提供一个例子。 我将在这里提供一个转换。 如果我们说以这种方式在Scala中实现了Future:

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

那么JavaScript / ES6中的相应代码可能如下所示:

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

我知道这不是斯卡拉,但我想包括它的完整性。 这是从Scala.js文档中取得的Future to Promise的映射:

 +-----------------------------------+------------------------+-------------------------------------------------------------------------------------------------------+ | 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. | +-----------------------------------+------------------------+-------------------------------------------------------------------------------------------------------+