returns Promise 在 ScalaJS 中的方法的门面
facade for a method that returns Promise in ScalaJS
我正在为 PouchDB Put Method
编写门面
这是我的正面
@JSName("PouchDB")
class PouchDB extends js.Object {
type CALLBACK = js.Function2[js.UndefOr[js.Dynamic], js.UndefOr[js.Dynamic], Unit]
def this(name: js.UndefOr[String] = js.undefined, options: js.UndefOr[PouchDBOptions] = js.undefined) = this()
def put(doc: js.Object, docId: js.UndefOr[String] = js.undefined, docRev: js.UndefOr[String] = js.undefined, options: js.UndefOr[js.Object] = js.undefined, callback: CALLBACK = ???): Unit = js.native
...
put API 接受回调和 returns Promise,我如何定义 put API 的外观,其中 return promise..
您的 Promise
需要一个类型,就像其他所有内容一样。 promise 没什么神奇的,它只是一个带有接口的对象,您可以输入该接口。您将需要知道 PouchDB 承诺的 API 是什么,但它很可能(非常)接近 Promises/A+。在那种情况下,它看起来像这样:
import scala.scalajs.js
import js.annotation.JSName
trait Promise[+A] extends js.Object {
@JSName("then")
def andThen[B](onFulfilled: js.Function1[A, B],
onRejected: js.Function1[Any, B]): Promise[B] = js.native
@JSName("then")
def andThen[B](onFulfilled: js.Function1[A, B]): Promise[B] = js.native
@JSName("then")
def andThen[B >: A](onFulfilled: Unit = (),
onRejected: js.Function1[A, B] = ???)): Promise[B] = js.native
}
这有点令人费解,因为未指定的处理程序意味着如果未指定 onFulfilled
处理程序,则 then
返回的承诺可以包含与此承诺相同类型的值。但我相信它应该像这样工作。
然后您可以声明 put
为某些适当类型 A
返回 Promise[A]
。
几年后更新;-)
Scalajs 包含 JS Promise 的内置类型,只需使用 js.Promise[_].
我正在为 PouchDB Put Method
编写门面这是我的正面
@JSName("PouchDB")
class PouchDB extends js.Object {
type CALLBACK = js.Function2[js.UndefOr[js.Dynamic], js.UndefOr[js.Dynamic], Unit]
def this(name: js.UndefOr[String] = js.undefined, options: js.UndefOr[PouchDBOptions] = js.undefined) = this()
def put(doc: js.Object, docId: js.UndefOr[String] = js.undefined, docRev: js.UndefOr[String] = js.undefined, options: js.UndefOr[js.Object] = js.undefined, callback: CALLBACK = ???): Unit = js.native
...
put API 接受回调和 returns Promise,我如何定义 put API 的外观,其中 return promise..
您的 Promise
需要一个类型,就像其他所有内容一样。 promise 没什么神奇的,它只是一个带有接口的对象,您可以输入该接口。您将需要知道 PouchDB 承诺的 API 是什么,但它很可能(非常)接近 Promises/A+。在那种情况下,它看起来像这样:
import scala.scalajs.js
import js.annotation.JSName
trait Promise[+A] extends js.Object {
@JSName("then")
def andThen[B](onFulfilled: js.Function1[A, B],
onRejected: js.Function1[Any, B]): Promise[B] = js.native
@JSName("then")
def andThen[B](onFulfilled: js.Function1[A, B]): Promise[B] = js.native
@JSName("then")
def andThen[B >: A](onFulfilled: Unit = (),
onRejected: js.Function1[A, B] = ???)): Promise[B] = js.native
}
这有点令人费解,因为未指定的处理程序意味着如果未指定 onFulfilled
处理程序,则 then
返回的承诺可以包含与此承诺相同类型的值。但我相信它应该像这样工作。
然后您可以声明 put
为某些适当类型 A
返回 Promise[A]
。
几年后更新;-)
Scalajs 包含 JS Promise 的内置类型,只需使用 js.Promise[_].