Nashorn和Scala未来要JS Promise转换
我有一个在Scala
和React/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. | +-----------------------------------+------------------------+-------------------------------------------------------------------------------------------------------+