这是我的脸
@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接受回调并且还返回Promise,我如何为put API定义outlook以返回promise ...
答案 0 :(得分:2)
您需要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
}
这有点令人费解,因为如果未指定then
处理程序,则未指定的处理程序意味着onFulfilled
返回的promise可以包含与此promise相同类型的值。但我相信它应该是这样的。
然后,您可以声明put
为某个合适的Promise[A]
类型返回A
。
答案 1 :(得分:0)
几年后更新;-)
Scalajs包含JS Promise的内置类型,只需使用js.Promise [_]。
请参阅:https://www.scala-js.org/doc/interoperability/types.html