【问题标题】:facade for a method that returns Promise in ScalaJS在 ScalaJS 中返回 Promise 的方法的外观
【发布时间】:2015-02-18 04:44:00
【问题描述】:

我正在为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 接受回调并返回 Promise ,我如何为 put API 定义返回 promise 的外观..

【问题讨论】:

  • 我不了解 PouchDB 文档(我不了解 PouchDB),并且我看不到问题,因为我不明白正确的 JS 会是什么样子像。你有一个在基本 JavaScript 中有效的例子吗?没有它,我不知道 Scala.js 类型应该是什么,在这里。另请注意,destory 在文档中被标记为已弃用:开始使用它可能不是一个好主意。
  • destory 的静态访问被弃用而不是实例之一:),离开销毁方法,把 API 返回 Promise 而不是使用回调 pouchdb.com/api.html#create_document 我该如何定义..
  • 你能打印出 CustomPouchError 的堆栈跟踪吗?否则它不会提供太多信息。您可以在 Chrome 开发工具中执行此操作,方法是右键单击 Promise,选择“保存到全局变量”,然后输入 temp1.stack
  • @nlawson 我使用了不同的数据库名称,它现在就像一个魅力,我不知道我早上对旧商店(“dude”)做了什么,如果我没记错的话我删除了从静态方法存储和从 chrome 控制台存储一些其他疯狂的东西 :( ,对此感到抱歉。
  • @sjrd 我修改了我的问题...

标签: scala.js


【解决方案1】:

您的Promises 需要一个类型,就像其他所有内容一样。 Promise 没什么神奇的,它只是一个带有接口的对象,你可以输入它。您将需要知道 PouchDB 的 promise 的 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 声明为返回一个Promise[A] 以获取一些适当的类型A

【讨论】:

【解决方案2】:

几年后更新;-)

Scalajs 包含一个用于 JS Promise 的内置类型,只需使用 js.Promise[_]。

见:https://www.scala-js.org/doc/interoperability/types.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-16
    • 2016-01-05
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多